ビジュアルモードで選択した範囲内を検索する
May 21, 2007category: Vim
選択範囲内を検索できないものかと調べていたら、素敵な設定があった。
以下の関数とキーマッピングを gvimrc に記述すれば、ビジュアルモードで選択した状態から / や ? で範囲内のみを対象とした検索が可能になる。
function! RangeSearch(direction)
call inputsave()
let g:srchstr = input(a:direction)
call inputrestore()
if strlen(g:srchstr) > 0
let g:srchstr = g:srchstr.
\ '\%>'.(line("'<lt;")-1).'l'.
\ '\%<lt;'.(line("'>")+1).'l'
else
let g:srchstr = ''
endif
endfunction
" Each map should be on a single line
vnoremap <lt;silent> / :<lt;C-U>call RangeSearch('/')<lt;CR>:if strlen(g:srchstr) > 0\|exec '/'.g:srchstr\|endif<lt;CR>
vnoremap <lt;silent> ? :<lt;C-U>call RangeSearch('?')<lt;CR>:if strlen(g:srchstr) > 0\|exec '?'.g:srchstr\|endif<lt;CR>
Vim 7 からデフォルトでも検索できるが……
Vim 7 では、特別な設定をしなくても選択範囲内の検索ができる。が、以下のステップを踏まなければならない (hoge を検索する例)。
- ビジュアルモードで検索したい範囲を選択する
- ビジュアルモードを抜ける
- /\%Vhoge または /hoge\%V
範囲選択後に一度ビジュアルモードを抜けなければならないし、毎回 \%V をタイプするのは気が滅入るので、素直に設定ファイルをいじった方が良いと思う。 ちなみに、一度ビジュアルモードを抜けた後に、同じ範囲を選択をしなおすにはノーマルモードで gv とタイプする。

comments