読者です 読者をやめる 読者になる 読者になる

evil-modeのelispをちょっと覗いてみる

本記事は Emacs Advent Calendar 2016 の5日目の記事になります。

( ´_ゝ`)ノシ
VimConf2016が終わったと思ったらこんな季節に。

ネタは何かと問われれば
Emacs with evil-mode が主戦力の Vimmer なので
evil-mode の elisp を見てみる、そういう事になった。

Spacemacsのユーザーが増えているようですが
各種elispのviキーバインド適応設定+独自設定ファイルまで
詰め込まれているのは重たすぎると思うので
当分evil-modeのままで行きます。

内容は emacs 何それ美味しいの?人向けのレベルです。
ただし、何がしかのプログラミング言語が読めないとツライです。

evilのバージョンは1.2.12です。

evil.info

ここにevilのインストール方法とか書いてある。

evil.el

ここが.emacs(init.el)で

      (add-to-list 'load-path "~/.emacs.d/evil")
      (require 'evil)

と書いて起動した時に読み込まれる部分。

evil.elのコード

;;; Code:

(require 'evil-vars)
(require 'evil-common)
(require 'evil-core)
(require 'evil-states)
(require 'evil-repeat)
(require 'evil-macros)
(require 'evil-search)
(require 'evil-ex)
(require 'evil-digraphs)
(require 'evil-types)
(require 'evil-commands)
(require 'evil-maps)
(require 'evil-integration)

(run-hooks 'evil-after-load-hook)

;;;###autoload
(define-globalized-minor-mode evil-mode
  evil-local-mode evil-initialize)

(provide 'evil)

;;; evil.el ends here

コードの説明。

require 'xxx

;はコメントアウト
(require 'evil-vars)
(provide 'evil-vars) と記述されている
evil-vars.elを読み込む。

*-hook

(run-hooks 'evil-after-load-hook)
一通りのevil-modeを構成するelispをロード後に
hookを読み込みます。
EmacsではEmacs上のイベント発生時に
ユーザーが読み込ませたい処理を仕込んでおく変数として
*-hookが用意されています。
evil-after-load-hook については
evil-vars.el 内で定義されています。
つまり、自分でelispでmode作る時は必要に応じて定義しておくものになります。

 (define-globalized-minor-mode evil-mode
  evil-local-mode evil-initialize)
モード定義

define-globalized-minor-mode で
evil-mode、evil-local-mode、evil-initialize-mode を
どのバッファでも利用できるマイナーモードとして扱うように設定します。
(evil-mode は viキーバインドを実現する elisp なのでこの扱いが丁度いい)
バッファを開く際のメジャーモードで evil-mode が不都合な場合は
そのメジャーモードの hook で evil-mode をオフにすることができます。
(メジャーモード・マイナーモード・バッファは
Emacs独自の定義があるので興味があればググッてください。)

雑に言うと開くタブ毎に evil-mode のオン・オフ切り替えの設定・操作が可能です。

evil-mode開始

これらが読み込まれた後に
.emacs(init.el)から
(evil-mode 1) を読み込むと
Emacs で evil-mode を使う準備が整います。

おまけ: <C-z>

一時的に Emacs キーバインドに戻したい場合はデフォルト設定の場合、
Emacs キーバインドに切り替え・切り戻しができます。
この場合は evil-mode をオフにしているわけではなく、
evil-emacs-state という
Emacs キーバインドのみの state に切り替えているだけです。
(vi で言うモードを Emacs のモードと区別するためevilでは
stateという名称で扱っています)

とりあえずまとめ

一番最初の evil.el だけで100行越えの記事に・・・。
最終的にはvim入門記事定番の
「起動→インサートモード→文字入力→
Esc→:qで終了」を elisp から追記していく予定です。

2017年も良い年でありますように。
Happy Vim and Emacs Life!