かなりすごいブログ

EmacsユーザーがVimを1ヶ月使った感想

今までずっとEmacsユーザーだったんですが、
Vimも楽しそうだったので使い始めてだいたい1ヶ月くらい経ったので感想を書きます。

色々と間違っている箇所はあると思います(特に経験が浅いVim)が、
EmacsやVimに興味がある人の参考になればと思います。

あと飽くまで感想なのでなんか全体的にふわふわしてます。

アプリケーションプラットフォームとして

EmacsはEmacsLisp、VimはVim Scriptという言語を実行できます。
どちらもLLです。

起動時にそれらの言語で書かれたプログラムを読み込んで、
機能を拡張する形になります。

Emacsはエディタというよりは、
リッチなI/O機能を持ったEmacsLispインタプリタという印象です。

お互いすごい人が便利なelispプログラムやvimプラグインを開発しており、
どちらかのプラットフォームで革新的なプログラムがリリースされると、
すぐにもう片方で同等のプログラムがリリースされたりします。

そういう意味ではお互い切磋琢磨しているという様な印象をうけます。
(「Emacsは糞、Vim最高!」「Vimは糞、Emacs最高!」みたいな罵り合いは見たことないです。)

お互い非同期プログラミングを可能にするライブラリもリリースされており、
「○○をやりたいけど、Emacs(Vim)じゃ実装できない」 という状況はあまりないのではないかなと思います。

アプリケーションプラットフォームとして見た感想はそんな感じです。

あ、でもXEmacs(GUIで起動させるEmacs)は画像表示に対応してるので、
特にtwitterクライアントとかの表現力では、 Emacsに軍配が上がるのかもしれませんね。

EmacsとVimの似たようなプログラムをいくつか表にしてみました。

プログラム elispプログラム Vimプラグイン
非同期ライブラリ deferred.el vimproc
パッケージ管理 el-get neobundle
なんかすごいやつ anything.el, helm Unite.vim
ターミナルエミュレータ eshell vimshell
ファイラ direx, dired vimfiler
twitterクライアント twittering-mode.el TwitVim

キーバインド枯渇問題について

どちらも枯渇するときは枯渇するし、工夫すればなんとかなると思います。

EmacsだとAnything-M-xを素早く押せるキーバインドに登録しておけば大体なんとかなるので、
Unite.vimでもそんな感じじゃないかと思います。

学習コスト

一般的なエディタに比べればどっちも大差ないと思います。

Vimの「モード」の概念について

EmacsとVimの最大の違いは、操作のスタイルだと思います。
どちらもマウスを使わずキーボードで操作が完結するように設計されているという点では同じですが、
それを実現するためのベクトルがかなり異なっています。

Emacsでは、一般的なエディタと同じように、押したキーの文字がそのまま入力されます。

一般的なエディタではツールバーのボタンなどをクリックして何らかの機能を実行する部分が、
キーボードで操作できるように、「CtrlやMeta(Alt)などの装飾キーを押しながら特定のキーを押す」
という行動をトリガーにして実行できるようになっています。

Vimでは「モード」という概念が導入されており、
複数のモードを必要に応じて切り替えることでテキスト編集を行います。

起動後デフォルトではノーマルモードと呼ばれるモードになっており、
その状態のままでは文字入力ができません。

文字入力を行うためには、
aキーなどを押して挿入モードに切り替える必要があります。

Emacsと違い、このとき装飾キーを押さなくても良いのが特徴です。

削除、置換、検索など、入力以外のテキスト編集は、ノーマルモードで行えます。
例えば、「dd」(dキーを2回連続で押す)と押すと、
カーソル位置の行が削除され、行詰めされます。

基本的に、このように何らかのキーを連続して押すことで、コマンドを実行します。

その点、Vimとは違いEmacsはコマンド入力に、
特定のキー(修飾キー)が「押されたまま」か「押して指を離した後か」 という条件が含まれるので、
キーバインドが幾分か複雑になります。

たとえば、「C-M-a b」というキーバインドは、
「CtrlとMetaを押したままaキーを押し、そのあとCtrlとMetaを離したあとで、bを押す」
というキー入力を意味します。

※Vimでもカスタマイズすれば装飾キーを含んだコマンド入力も可能なので、
「挿入モードではC-jkhlでカーソル移動」といったこともできます。

そういった事情があるので、個人的には、特にテキスト編集など、
使用頻度が高いコマンドほど、 Vimのほうが効率良く入力できるのでは、と考えています。

逆に、「文字入力」では明らかにEmacsのほうが早いと考えています。

たとえば、バッファ(今開いているファイルのようなもの)に
「moge」という文字を入力した場合を想定します。

Vimでは、「i(もしくはa)を押して挿入モードに入り、mogeと入力し、その後ESCキーを押してノーマルモードに戻る」
という行動が必要になります。

その点Emacsでは、「mogeと入力する」という行動で入力が完了します。

このことから、単に文字や文章を「入力する」作業では、
Emacsのほうが早いのではないかと思います。

プログラミングよりは、特に文章編集で顕著に現れるのではと思います。

あと、個人的にESCがホームポジションから遠いので
「モードから抜ける(ノーマルモードに戻る)」ためのコストが高い気がします。
※C-gとかをバインドすればいいんですかね。邪道?

EmacsとVimの操作スタイルの違いが、そのまま「何に重きを置いているか」につながっていて面白いな、と思います。

Vimのテキスト編集力ぱねぇ

個人的に、Vim使って一番感動したのが、テキスト編集です。

簡単に言うと、ノーマルモードなどで各種テキスト編集コマンドを実行するときのキーバインドがやばい、のです。

テキスト編集関連のキーバインドは、
わかりやすく言うと「操作(動詞)・対象・範囲」で構成されており、
これら3種類のキーを幾つか覚えるだけで、かなり幅広いテキスト編集が可能になります。

例えば、dは削除(delete)という操作を、wは単語(word)という対象を、3は3つという範囲を意味します。

これらを組み合わせ、「3dw」と入力すると、カーソル位置から3つぶんの単語が削除されます。

すばらしいですね。

単純計算なので参考程度にしてほしいのですが、操作と対象のキーを10個覚えるだけで、
10^10で100種類のキーバインドが即座に入力できるようになるということですね。

数字をその前に打つだけで、範囲拡張も自由自在です。

EmacsにおけるC-gさんの頼もしさ

Emacsでは、キャンセル関係のコマンドがC-gで統一されているので、
取り合えず困ったら「C-g」を連打すれば大体なんとかなります。

Vimでは、場合によってESCだったりqだったりBSだったりするので、
とりあえずこれを連打しておけば安心、的なことができないのでVim初心者としてはこの点をどうにかしたいです。

Vim界隈ウェブサイトのおしゃれ感

ウェブデザイナーのユーザーが多いのかわかりませんが、
Vim界隈のウェブサイトはなんかおしゃれな気がするというかウェブ力が高いというか、そんな気がします。
※あくまで個人的な感想です

vim-users.jpとかすごいいい感じですね

まとめ

  • アプリケーションプラットフォームとしての限界は大差ないように感じる
    • その気になってカスタマイズすれば、VimをEmacs風に使うことも、その逆もできるはず
    • ただ、Emacsでは画像表示できるよ
  • 一番の違いは、考え方(ポリシー)の違い
  • Vimのテキスト編集コマンドがすばらしい
  • Evil

※あくまでVim歴1ヶ月の初心者の感想です。
※ツッコミがあればお願いします。