Vimのキーマッピングで入力待ちを発生させない!
概要
\rw
というキーマッピングをVimに設定したのですが入力待ちが発生していました。(より長いキーマッピングが定義されているため入力をまっている)
\rw
を入力した時に入力待ちをなくしたい。という話です。
Vimのキーマッピングについて
nnoremap rr :echo "すぐ実行して欲しい"<CR>
nnoremap rrr :echo "あまり実行しない"<CR>
上記のようなrrr
とrr
というキーマッピングを定義した時、rr
まで入力した時に入力待ちが発生します。
enterを押せばrr
で実行できますが、せっかくキーマッピングを設定しているのでrr
を入力したらすぐに実行して欲しいです。
<nowait> をつけると入力待ちが発生しない
rrr
を意図して設定している時はこちらを削除するなりリネームしてやったり、<nowait>
をつけてやるとrr
を入力した時に入力待ちが発生しません。
nnoremap rrr :echo "r"<CR>
nnoremap <nowait> rr :echo "r"<CR>
ただし、プラグインがキーマッピングのrrr
を設定しているとそうはいきません。
使っているプラグインマネージャーによるとは思うのですが、NeoBundle
の場合は.vimrc
読み込んだあとにプラグイン本体を読み込むので、プラグインで定義しているキーマッピングに対しては<nowait>
は効きません。
なぜなら<nowait>
がついているキーマッピングを読み込む時点で、より長いキーマッピングが既に定義されている必要があるからです。
つまり、下記の設定では、rr
で入力待ちが発生します。
nnoremap <nowait> rr :echo "r"<CR>
nnoremap rrr :echo "r"<CR>
今回、入力待ちの発生するキーマッピングは、入力待ちの原因となるキーマッピングが.vimrc
に書いていなかったのでプラグインだと疑いました。
キーマッピングを探す
:map でマッピングされている一覧を得ることができます。下記のキーマッピングが原因でした。
\rwp <Plug>RestoreWinPosn
grepすると定義場所が下記というのがわかりました。
~/.vim/bundle/Align/plugin/cecutil.vim
if !hasmapto('<Plug>RestoreWinPosn')
map <unique> <Leader>rwp <Plug>RestoreWinPosn
endif
.vimrc
に下記のような1行を書くとmapが実行されなくなるので、そのようにすると便利機能と引き換えに入力待ちを消することができました。
nmap none <Plug>RestoreWinPosn
参考
-
category:
- 開発環境