Evilとは?
EmacsをVim化する、Emacsプラグインです。しかし、完全にVimには成りません。でも、主観的に、90%程度Vimになるでしょう。僕はそんなに、Vimを使ったことがありませんが。
Lisperとしては、VimよりEmacs
個人的にLispを書くなら、Emacsを選択します。プラグインがEmacs Lispで書かれており、おそらく個人的な観測として、LisperはEmacsユーザの方が多い印象でした。もちろん、熱狂的なVimmerもいましたが。
僕は、最初からEmacsのユーザでした。Common Lisp用のエディタとして使っていました。なので、基本的にEmacs寄りのユーザだったと思います。
ステート(Vimのモード)
ステートとは?
Vimにはモード(Evilではステート)というものがあります。
(ちなみに、おそらくですが、Emacsに”モード”があり、それとバッティングするのを恐れて、Evilでは”ステート”と読んでいるとと思います)
Vimは、状態を持ち、その状態に合わせて、テキストエディタとしての機能的役割を変えて行きます。移動するモードや、文字を挿入するモードという様に。それに合わせて、適当なキーバインドが割り当てることができます。
ステートの利点
Vimでは、ステートがあるために、キーバインドの競合が起りにくいといった利点があるでしょう。例えば、挿入ステートと、他のステートが分離されているため、普通の他のエディタなら、hjklのキーはそのまま文字が表示されますが、挿入ステート以外であれば、カーソル移動のキーバインドになるといった具合です。
一方Emacsでは、普通のカーソル移動にhjklを割り当てようとしても、hjklは文字の印字のコマンド(self-insert-command)になるため、競合します。なので、Ctrlキーを押しながら、コマンド操作が多いということだと思います。
ステートのややこしさ、煩わしさ
ステートの視覚的なアドバイス
一方ステートに慣れるまでが、すごくややこしいです。そもそも、エディタに状態がある自体が、凄く事をややこしくします。ユーザは今何の状態なのか?を考えながら編集しないといけないので、操作ミスが起りやすいです。ノーマルステートと思っていら、”hhhhhhhhhhhhhhh"と印字されるなんて、日常茶飯事です。
そもそも、よくよく考えたら、状態に関する視覚的なアドバイスが何も無いことが問題なのです。普通のGUIのアプリケーションならば、状態が変更されているならば、なにかしらの視覚的なアドバイスがあるはずです。
なので、状態が変更されたら、視覚的それが分かるようにしました。具体的には、カラーテーマを変更するようにしています。次のような感じです。
(add-hook 'evil-normal-state-entry-hook
'(lambda ()
(color-theme-euphoria)))
(add-hook 'evil-insert-state-entry-hook
'(lambda ()
(color-theme-gray30)))
こうすると、次のようなスクリーンショットになります。まずは、ノーマルステートだとこうなります。
次は挿入ステートです
最後に
よくよく考えたら、Evilじゃなくて、Vimの話になった感。