LoginSignup
3
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-01

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の話になった感。

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