読者です 読者をやめる 読者になる 読者になる

Vimのremap設定が思い通りに動作しない時は

この記事は Vim Advent Calendar 2012 の306 日目の記事になります。
下記の内容は id:thinca さんに vim-users.jp で教えていただきました。ありがとうございます。
また vim-users.jp の Hack #148id:thinca さんはすでに下記の内容を執筆されています。
再掲になりますがお許しください。

remap設定の調査方法

私は下記のようなvimrcで 7行目で意図する<C-l>がEscapeにならないと思い困っていました。

こういった場合まずremap command対象の右側を省略したcommandを入力します。

:inoremap <C-l>

するとcommand lineには

i <C-L> <C-R>=<SNR>2_DisableKeymap()<CR>

と表示され、たしかに意図するようにremapできていないことが確認できます。

つぎに「この2_DisableKeymap()がどのfileでremapされているのか」ですが先程のcommandの先頭にverboseをつけた下記のcommandで確認できます。

:verbose inoremap <C-l>

この結果は

Last set from ~/.vim/vimrc

となり、「自分のvimrcの31行目でふたたび<C-l>にremapしていることに気がついていなかった」というのがオチでした。

私の場合、日本語入力用pluginであるtcvimeの設定をそのままcopy and paste していたため再びremapしていることを忘れていた、という具合です。

似たようなシチュエーションは結構あるかもしれないのでVACに書かせていただきました。

おわり。