同一視されるキーに注意

Vim Advent Calendar 2012 の 164 日目の記事です。

Vim は元々端末で動作していたソフトウェアで、それ故のキー周りに関する制限がいくつかあります。端末版の Vim を使うのであればある程度は仕方のないことですが、いくつかの制限は gVim にも残っています。

一部のキーが同一視される

以下のキーは端末ではその仕様上の制限により同一視されて区別できないのですが、Vim では GUI 版でも同じように同一視されて区別することができません。

  • <C-i> == <Tab>
  • <C-m> == <Enter>
  • <C-[> == <ESC>

つまり、以下のようなことはできません。

inoremap <expr> <Tab> MySuperTab()
" ↓これは <Tab> のキーマッピングを上書きしてしまう!
inoremap <C-i> <C-o><C-i>

<C-[> くらいならそんなに困ることはないんですが、残りの2つははまったことがある人もいるのではないでしょうか。
今のところ解決方法はなく、きちんと問題を認識して回避するしかありません。gVim 版では技術的には区別可能なはずなので、将来のバージョンで解決される可能性はあります。
ちなみに似たようなキーの組み合わせに <C-h> と <BS> がありますが、これらは区別可能です。


これらとは別に、GUI 版では使用できるけど CUI 版では使用できないキーの組み合わせも結構あります*1CUIGUI の両方を使う人はきちんと把握しておくと良いでしょう。

*1:CtrlとAltの同時使用や、一部の記号、数字と Ctrl の組み合わせなど