IdeaVIMで待望のmapコマンドが実装されるよ

まだリリースされてないので、TeamCityから最新のビルドを取ってきてね。
http://teamcity.jetbrains.com/viewType.html?buildTypeId=bt299&guest=1


前々から要望の多かった :mapコマンドが実装されてた。こんなさっくり実装しちゃう[twitter:@vlasovskikh]さん、スゲーす。
追加されたExコマンドは :map系と:sourceコマンドの2つ。:map系は、:map, :nmap, :vmap, :omap, :imap, :cmap, :noremap, :nnoremap, :vnoremap:, :onoremap, :inoremap, :cnoremap と大方サポートしてる。
https://github.com/JetBrains/ideavim/blob/master/src/com/maddyhome/idea/vim/ex/handler/MapHandler.java


ざっと使ってみた分には良い感じに動いてる。ただ残念な事にIdeaVIM内でキーマップを変えているので、IDEが本来持つ機能(アクション)に割り当てできない。

例えば、今まではコード補完時に候補をCtrl-J, Ctrl-Kでも選べるようにしたかったので、この2つをIdeaVIMから取り上げて、Editor ActionsのDownとUpに割り当てていた。それを :imap コマンドを使って次のように再定義してみた。

:imap <C-j> <Down>
:imap <C-k> <Up>

たしかに入力モードのときに、Ctrl-J, Kでもカーソルの上下移動ができるようになったのだけど、コード補完の候補リストには効き目がなかった。たぶん、これIntelliJが本来持っているDown, Upアクションじゃなくて、IdeaVIMで定義したVimMotionDown, VimMotionUpにリマップされてるからなんだと思う。

同じような理由で、i_, i_IntelliJが持っているワード補完に割り当てなおしたかったのだけれど、IdeaVIMのmapコマンドに「IntelliJが本来持っているActionに割り当て直す」方法がなかった。orz
うーむ、実に惜しい。これ『IntelliJが本来持っているActionに割り当て直す』が出来たら、怖いモン無しなんだけどな。ちょっとコード見てみたら、mapコマンドの実装は、「KeyStrokeを別のKeyStrokeに割り当て直す」になっているので、KeyStrokeが存在しないIntelliJ本意の機能を呼び出すのは簡単そうじゃなかった。:-(

ちなみに、こんな風にIntelliJのショートカットキーを別のキーにリマップしたらどうなるのかな?と思ったらどうにもならなかった。

:nmap ,c <C-/>

「Commen with Line Commen (^/)」をノーマルモードの ,c に割り当てたつもりだけどダメだった。なんとなく、そうなると思ってたけど。:-P


良いところまでイケてるんだけどなぁ。理想はVrapperのeclipseactionなんだけど、mapコマンドに特別な書き方を定義するのを受け入れられるかどうかとかが悩みどころなんだろうなぁ。
Eclipseのキーバインドをvim風にできるVrapperが素晴らしすぎる件について - ( ꒪⌓꒪) ゆるよろ日記


...という事を英語で伝えられる力はないので、とりあえず備忘録でメモっといた。そんでも、Andreyさんには捕捉されそうだけど。:-)