端末の Vim でも Alt キーを使う

本当は Vim Hacks のネタにしようと思ってたんだけど、どの環境でも動くかよくわからんし確認もしようがなかったのでメモ代わりにこっちに書いておく。というわけで環境によっては動かないかもしれないのであしからず。
端末の Vim のノーマルモードで Alt キーにマッピングする小技。

nmap <ESC>a <M-a>

見ての通り で始まるので挿入モードなどでは使えない。いや、使ってもいいけど挿入モードから抜ける度にキー待ちが発生するのでやめた方がいい。
なお、a を直接機能にマッピングする方法も考えられるけど、そうすると gVim と設定が共存できない。素直に マッピングするのが無難。


また、 を押すと が送られてくるようなので、逆に が来たら になるようにしておく。

map <NUL> <C-Space>
map! <NUL> <C-Space>

こっちは挿入モードでも使える。なので で補完、とかもできる。


私は上記の 2 つを合わせて以下のように設定してる。

if has('unix') && !has('gui_running')
  " Use meta keys in console.
  function! s:use_meta_keys()  " {{{
    for i in map(
    \   range(char2nr('a'), char2nr('z'))
    \ + range(char2nr('A'), char2nr('Z'))
    \ + range(char2nr('0'), char2nr('9'))
    \ , 'nr2char(v:val)')
      " <ESC>O do not map because used by arrow keys.
      if i != 'O'
        execute 'nmap <ESC>' . i '<M-' . i . '>'
      endif
    endfor
  endfunction  " }}}

  call s:use_meta_keys()
  map <NUL> <C-Space>
  map! <NUL> <C-Space>
endif

コメントにもあるように、O は矢印キーが使っているようなのでそこだけは使えない。