Emacsは、Emacs Lispという言語を使って、「自由」を軸にあらゆる想像的活動のための環境して発展してきました。しかし、「ファイルを編集する」という操作に関しては、現代において、vi/Vim が非常に優秀なインターフェースであることも事実です。この2つのエディタは多くのファンを抱え、宗教戦争と言われるほどまで発展しました。長らく、「どちらが良いか」という話を繰り返してきましたが、その中で共和を唱える人が出てきました。それが今回紹介する Evil です。
Evil とは
Evil という名は、"Extensible VI Layer"からきています。Emacs の自由な環境で、Vim の優秀なインタフェースを提供してみようというものです。
元々、「Emacs上でVi操作したい」という思想は昔からありました。それを元に、色々改修していき、結果的に生まれたのが Evil になります。
Evilの導入方法
Evilは、MELPA や NonGNU ELPA などからのパッケージで使うことができます。今回は MELPA 上での導入方法を解説します。
まず、M-x コマンドを使って、evil を導入していきます。
M-x package-install RET evil RET
導入ができたら、init.el 上で以下のコードを追加します。
(use-package evil
:ensure t
:config
(evil-mode t))
Emacs を再起動して、ステートに <N>
と出たら成功です。
操作方法
基本的な操作方法は、Vimと同じです。ステートが の時はVimの Normal モードと同様の動きをします。他にも、
- : Vim の Insert モードと同様の動き
- : Vim の Visual モードと同様の動き
をします。また、 は Emacs ステートと呼び、Emacs の標準キーバインドで操作することが可能です。
しかし、一部、Emacsの機能を生かせるために、設定でONにする必要がある箇所があります。例えば、C-u はVimではNormalモードで「画面半分上に移動する」という操作を行いますが、Emacsではプレフィックス引数を動作させるキーでもあります。そのため、Emacsの機能を生かすために、デフォルトではOFFになっています。しかし、設定でONにすることができます。以下のように編集することで、C-uをVimと同じ操作にすることができます。
(use-package evil
:ensure t
:custom
+ (evil-want-C-u-scroll t)
:config
(evil-mode t))
他にも、必要な設定はたくさんあるので、以下を参考にすると良いでしょう。
一部のファイルをEmacsモードにする
私は、プログラミングする際にはVimモードで行いますが、テキストやMarkdownなどの自然言語を扱う場合はEmacsの操作を好みます。絵画では絵筆を、手紙は万年筆を使うようなイメージです。
そのため、ここでは、Markdown, Org-mode, Text-mode の場合は Emacs ステートにする処理について解説します。
init.el 上で、以下のような処理を作成します。
(dolist (mode '(org-mode markdown-mode text-mode ...))
(add-to-list 'evil-emacs-state-modes mode))
evil-emacs-state-modes
とは、Evil モードが特定のメジャーモードに入った際に、自動的に Emacs ステートに切り替えるための変数です。これにより、指定したモード(今回は、org-mode, markdown-mode, text-modeなど)では、Emacs 標準の操作が可能になります。
相対行番号の追加
私は Vim を扱うときに相対行番号をONにして使っています。
相対行番号とは、自身のカーソルを基準とした番号表示のことを指します。これを有効にすると、「相対行番号+j,k」 でカーソルを移動することができ、とても便利です。
Emacs では、
(setq display-line-numbers-type 'relative)
で相対行番号となります。これをEvilで行いたい場合は、:custom
の上に設定します。
(use-package evil
:ensure t
:custom
(evil-want-C-u-scroll t)
+ (display-line-numbers-type 'relative)
:config
(evil-mode t))
参考文献