search
LoginSignup
3

More than 5 years have passed since last update.

posted at

updated at

Evilのステートにちょっとした工夫

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)))

こうすると、次のようなスクリーンショットになります。まずは、ノーマルステートだとこうなります。
スクリーンショット 2014-12-01 11.12.53.png

次は挿入ステートです

スクリーンショット 2014-12-01 11.12.59.png

最後に

よくよく考えたら、Evilじゃなくて、Vimの話になった感。

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
What you can do with signing up
3