2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Emacs × Vim = Evil! 人生を豊かにするエディタ環境を構築

Last updated at Posted at 2025-03-02

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 上で以下のコードを追加します。

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と同じ操作にすることができます。

init.el
  (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 上で、以下のような処理を作成します。

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 では、

init.el
(setq display-line-numbers-type 'relative)

で相対行番号となります。これをEvilで行いたい場合は、:custom の上に設定します。

init.el
  (use-package evil
  :ensure t
  :custom 
  (evil-want-C-u-scroll t)
+ (display-line-numbers-type 'relative)
  :config
  (evil-mode t))

参考文献

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?