この記事は新年まで勝手にVim記事を書き続けるの2日目(2010/12/27)です。
adventしたかったけれどもうクリスマス後なので。。
いきなりVimそのものから離れますがzshのVimモードです。
zshそのもののすごさ紹介は他に譲りますが
あまり他では見ないVimモードについて触れてみたいと思います。
まずVimモードにあなたのzshを変更しましょう。
"-e"?そんなEmacsモードで大丈夫か?
bindkey -v
これであなたのzshはVimによって解き放たれました。
入力を間違えたからといって
この状態でコマンドを入力するとき、まずインサートモードで新しい行が開始されます。
インサートモードと言うことは入力が可能ですので"ls"とタイプすれば
ls
と入力されるわけです。あとは
ここまでは普通ですね。
インサートモードがあるならノーマルモードがあるはずです。
そうEscを押せばインサートモードを抜けてノーマルモードに入ります。
ここからがVimモードの気持ち悪いところです。
左右移動もhlで可能、jkで上下つまりカーソルキー上下での候補選択が可能になります。
では長くコマンドを入力中にもし途中で行頭に移動したくなったら?
もし行末に移動したくなったら?コマンドを途中で切り取りしたくなったら?
これまではemacsキーで
- C-a(行頭)
- C-e(行末)
- C-k(カーソル移行をKillカット)
していたと思いますがVimモードではVimのキーで操作できます。
つまりこうなりますね
- 0
- $
- D
素敵ですね。
ほかにも
- dd
- p
など一通りのVimのコマンドが利用できます。
このままでもかなりの気持ち悪さですが
いま何モードかEsc連打しないとわからないのはスマートでありませんね。
zshが本気を出せば表示することが可能です。
色々な方の切り貼り+自分風味で恐縮ですが
#zshプロンプトにモード表示#################################### function zle-line-init zle-keymap-select { case $KEYMAP in vicmd) PROMPT="%{$fg[red]%}[%{$reset_color%}%n/%{$fg_bold[red]%}NOR%{$reset_color%}%{$fg[red]%}]%#%{$reset_color%} " ;; main|viins) PROMPT="%{$fg[red]%}[%{$reset_color%}%n/%{$fg_bold[cyan]%}INS%{$reset_color%}%{$fg[red]%}]%#%{$reset_color%} " ;; esac zle reset-prompt } zle -N zle-line-init zle -N zle-keymap-select
とすることで
のように現在のモードが表示可能です。
zshの恐ろさですね。
さらにさらにヴィジュアルモードを忘れていました。
こちらはすごい方の力をお借りします。
"\太\古\の\正\規\表\現 zshでvimのビジュアルモードを再現-完結編-"
http://zshscreenvimvimpwget.blog27.fc2.com/blog-entry-3.html
こちらの記事を参考に.zshrcへ追加して下さい。
ノーマルモードで"v"入力後にhlで左右に選択してyでyank可能です。
さてこれであなたのzshも
げに恐ろしきVimモードになれたのではないでしょうか。
茨の道ともきくzshのVimモード。
明らかにEmacsモードの方が他shで培ったキーバインドで使いやすい気もしますが
試してみてはいかがでしょ