2012-08-17

Vim vs Emacs

世間では、VimとEmacsと、どちらが優れたテキストエディターであるかという論争があるらしい。そこで私も考えてみることにした。

Vimは純然たるテキストエディターである。その本文であるテキストの編集のための機能は豊富にある。

一方、Emacsはテキストエディター以上のプラットフォームになろうとしている。メール、IRCクライアント、ブラウザー、画像表示などなど。これがために、「Emacsは悪くないOSである。ただし良きテキストエディターを欠く」とまで言われている。

vimは操作性に優れている。vimのほとんどの機能は、文字を連続して入力することで使うことができる。操作を複数行にわたって適用したい場合は、操作の文字に先立って数字を入力するとか、後にカーソル移動を入力するなどすれば、非常に素早く入力できるので、操作の妨げにならない。

一方、Emacsは操作しづらい。Emacsの操作は、単一のキーではなく、Ctrlなどのキーと組み合わせて同時に押さなければならない。複数のキーを正しく同時押しするのは、時間がかかる。このため、操作を中断させてしまう。これこそが、EmacsとはEsc-Meta-Alt-Ctrl-Shiftの略であるとも言われている所以である。また、あまりにも同時押しを多用するので、指を痛める恐れもある。かのGNU Emacsで有名なリチャード・ストールマンすら、手を痛めているのだ。RMSは、手首ではなく手が痛いと証言している。明らかに、Emacsのデフォルトのキーバインディングが原因であろう。

vimは高速に起動するし、動作も軽快である。vimユーザーは、vimを終了したり、複数実行したりということを躊躇しない。なぜならば、vimは気にならないほど素早く起動するし、メモリ使用量も少ないからである。

一方、Emacsは起動が遅く、またメモリ消費量も激しい。Emacs信者は、「Emacsは一度起動したら終了する必要がないのだ」とか、「ひとつのEmacsのプロセスを共有できるemacsclientを使えばいい」などといって自ら慰めているようだが、EmacsがEight Megabytes And Constantly Swappingとまで言われている事実を知らないようだ。

Vimのデフォルトでは、多くの機能を有効にしない。これにより、Vimに初めて触れた時に、癖のある好みの激しい機能に悩まされることはないし、わざわざ機能を無効にするために設定方法を学ぶ必要はない。機能は後から簡単に有効化できる。設定ファイルで使われている言語も、set hogehoge=hagehageのように、単純明快な文法である。もちろん、チューリング完全なプログラミング言語としての機能は全て持ち合わせている。

一方、Emacsでは、最初から多くの機能を有効にしている。しかし、万人を納得させることはできないし、特に機能の多くは、ほとんどの人間が不快になるほどひどい設定になっている。例えば、C言語のデフォルトのインデント幅は2文字である。しかも、ひとたびインデントしたならば、それ以上インデントすることを許さない。この設定を無効化するには、非常に使いづらい設定UIの中をさまようか、あるいはelispという、単なる設定ファイル用の言語としては非常に難しい言語を記述しなければならない。たとえば、C言語のインデント幅を4文字、インデントルールの強制を無効化するには、.emacsというファイルに、(setq-default c-basic-offset 4 c-syntactic-indentation nil c-syntactic-indentation-in-macros nil)、という奇妙で読みづらい文法の言語を記述しなければならない。しかも、これはC言語だけの話で、他にも変な機能が多数あるので、ユーザーの記述しなければならない.emacsは膨大になる。

ここまでは、Vimに圧倒的に有利な項目だけを比較してきた。では、Vimがしばしば批判される項目はどうか。

Vimにはモードがある。これは、欠点ではなく利点である。Vimにはモードが存在するので、Emacsのようにキーの複雑極まりない同時押しをしなくても、ほとんどの操作ができるのだ。それに、日本人ならば誰でも、モードのあるIMEを使っているではないか。ソフトウェアが賢く振舞おうとしても、たいてい失敗するものだ。モードの存在は、賢く振舞っているつもりのソフトウェアよりよっぽどマシである。ただし、同等のものさしでSKKを評価すべきではない。あれはあまりにも非人間的である。

Vimの学習曲線は急峻すぎるという批判もある。たしかに、初めてVimを起動して試しに何かキーを押してみても、運良くインサートモードに入るまでは何も入力されないという体験は、強い印象に残る。また、Vimの操作方法は独特であり、慣れるのにも時間を要する。しかし、Vimの基本的な操作方法や設定方法は短期間で習得できる。学習曲線はたしかに急峻であるが、それだけ短期間で素早く学べるという事である。そして、ほんの少し学ぶだけで、学習曲線はほぼ水平になる。すなわち、それ以上、ほとんど学ぶ必要がないのだ。

一方、Emacsは、初めこそキーを叩けばそのまま入力できるという事実に安堵するかもしれないが、保存の仕方も終了方法もわからずに途方にくれるはずだ。一般によく知られているEmacsの学習曲線は、謎めいた渦巻きである。

考察結果として、Vimが圧倒的に勝利した。

とはいえ、いまや、ブラウザーのタブ一つで、VimとEmacsを合わせたよりも多くのメモリを消費するし、学習曲線というのも、VimもEmacsも同程度に急峻ではないかと思う。ただ、モードの存在は大きいし、操作方法はVimが圧倒的に優れていることは間違いがない。それに、Emacsはデフォルト設定があまりにもひどすぎる。ほとんどの便利な機能をデフォルトで無効化しているVimは、最初不思議に思ったものの、それなりの理由があるのだ。ただ、Vim scriptだけは、ちょっと文法が気に入らない。簡単なことは確かだが、それこそ全面的にPythonにでも置き換えたほうがいいんじゃないかと思う。といっても、.vimrcを書くためだけに実用的なプログラミング言語をひとつ学ぶというのも、それこそ学習曲線が急峻すぎるので、これが一番いいのかもしれないが。

9 comments:

Anonymous said...

Emacs は Emacs を使うことが目的になりがちなのがなんとも。
設定いじって悦に浸るのもいい暇つぶしになるんですけどね。潰せるだけの暇があるなら。

Anonymous said...

私はemacsもvimも両方使えるくちですが
 vimはコーディング向きだが日本語入力にはストレスフルでやっていられない
というのが正直なところです。

エディタのモードと日本語入力FEPのモードの両方を同時に把握していないといけないためです。
GVimならカーソルの色なりで判別できますが、判別できないよりはマシという以上のものではないですね。

Anonymous said...

もう少し公平に比較して欲しかった、、、

Anonymous said...

20年以上前からあるつまらない論評がまた一つ増えただけ。真面目にこんなコピペレベルのこと書いてて恥ずかしくないのかと思う。

Anonymous said...

Python こそ奇妙で読みづらいです。

Anonymous said...

でしたら、Pythonでカスタマイズ可能な sublimetext はどうでしょうか。
vim に近いと思います。
http://www.sublimetext.com/

yx_wh said...

> vimはコーディング向きだが日本語入力にはストレスフルでやっていられない
激しく同意。中国語IMEだってそうです。もともとVimはEmacsよりつかいやすいですが、IMEがあれば逆です。

最近、ibus-mozcのローマ字テーブルを中国語双拼IMEふうに改造しました。こんな感じかな:

http://commons.wikimedia.org/wiki/File:Advanced_Romaji_2.svg

yx_wh said...
This comment has been removed by the author.
yx_wh said...
This comment has been removed by the author.