Mapping with <nowait> option in vim

2016/08/09 Tue

vim でマッピングをする時に、便利なオプションがあることを最近知った。

それが <nowait> オプション。

例えば、よくやるキーマップの例としてこんなのがある。

nnoremap <silent> <ESC><ESC> :<C-u>nohlsearch<CR>

エスケープ2回でハイライト消すっていうマッピング。

だけど、これを設定した状態で、コマンドウィンドウを <ESC> で閉じたい場合、<ESC> を押下しても、次のマッピングを待っている状態になってしまって、すぐに閉じることができない。

こんなマッピングをした場合。

au MyAutoCmd CmdwinEnter * nnoremap <silent><buffer> <ESC> :q<CR>

この場合に、 <nowait> というオプションを追加することで、 <ESC> を押下したらすぐにコマンドウィンドウを閉じることができる。

au MyAutoCmd CmdwinEnter * nnoremap <silent><buffer><nowait> <ESC> :q<CR>

めちゃめちゃ便利。

僕の場合、コマンドウィンドウと、Uniteを閉じるのにこのオプションを使っている。

こんな感じ。

" Cmdwin.
nnoremap : q:i
vnoremap : q:A

" nohlsearch.
nnoremap <silent> <ESC><ESC> :<C-u>nohlsearch<CR>

" Escape cmd win.
au MyAutoCmd CmdwinEnter * nnoremap <silent><buffer><nowait> <ESC> :q<CR>

" Escape unite.
au MyAutoCmd FileType unite nmap <buffer><nowait> <Esc> <Plug>(unite_exit)

comments powered by Disqus