* Evilの:q
* ( ´_ゝ`)ノシこの記事はEvil Advent Calender 2014 5日目の記事です
** VimとEvilの違い
Evil話の前置きで「ロードスという名の島がある。・・・」なみに定型句となっている、
「Evil≠Vim」
これは時として私のような貧弱な素Vimmerにも牙をむきます。
** VimmerからEvilに移ったら割と体験するイベント
今回はそのひとつexモードのコマンド:q[uit]です。
Evilデフォルトで使うとC-x C-cみたいな挙動になります。
ウィンドウ一つでメモ帳な使い方していれば問題ないですが
今時Emacs使う人はタブで複数のファイルを開くのが普通なので
ウィンドウ丸ごと閉じられて
( ^o^)< Evilすごい!再現度高い!
( ˘⊖˘) 。o(よし!exステートも試してみよう!)
:q |┗(☋` )┓三
( ◠‿◠ )☛ お前はEvilの闇を覗いてしまったのだ
▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああああああああ
となった方は結構いると思います。
Emacsは一度起動したら起動しっぱなしの利用法がメインなので
うっかりでも起きると困りますね。
** ウィンドウ丸ごと閉じる悲劇は回避しよう
とりあえずの回避方法。
init.elに
(evil-ex-define-cmd "q[uit]" 'kill-this-buffer)
動作環境:windows7 Emacs 24.2 Evil 1.0.8
と書けばkill-this-bufferの挙動になるのでウィンドウ丸ごと終了は回避できます。
ただ、これだと現在編集中のファイルが変更未保存だと
保存するかどうか確認メッセージを出してきます。
:qとしては期待通りの挙動ですが、現状:q!でも挙動は同じです。
:q!の挙動が再現できれば便利だと思います。Emacsのハッカーさんよろしくお願いします。
(他力本願)
** 意外とキーバインドやコマンド変更は簡単なEvil
Evilは各種キーバインド用関数をノーマルステートだと
(define-key evil-normal-state-map (kbd "使いたいキー")
'使いたい機能の関数。evilのじゃなくてもいい。)
exコマンドは簡単なものなら今回みたいな書き方でいけるようです。
(完全再現ではないですが)
Vimと比べてなら機能が関数名なので
書いて数か月後に、ぱっと見であれ?この設定なんだっけ?な事態は少な目。
便利。