Hack #130: :grepをより便利に利用する
Posted at 2010/03/09ツイート
問題
Hack #129: 複数のファイルから検索する
では:grep
について紹介しました。
色々と便利なコマンドなのですが、頻繁に使っていると次のような不満が出てきます:
:grep
の引数は基本的に
:grep {pattern} {file} ...
なのですが、同じファイル郡に対して異なるパターンで:grep
する
というケースは少なくありません。例えば
:grep rebase *.[ch]
で検索した後で
:grep rebase_cmd *.[ch]
と検索しなおすとしましょう。全てのコマンドを入力しなおすと面倒ですから、 通常は入力履歴を<Up>/<Down>で参照して以前入力した コマンドを修正する形になります。
ここで、入力履歴を手繰るまではよいのですが、
パターンを修正するところが問題です。
修正するためには<Left><Left><Left>...などとしてパターンの箇所まで
カーソルを移動しなければならないのですが、これが面倒です。
特に{file} ...
の指定が長くなると面倒さが倍増します。
どうにかして簡単に修正することはできないでしょうか。
解決方法
以下の内容をvimrcに追加します:
command! -complete=file -nargs=+ Grep call s:grep([<f-args>])
function! s:grep(args)
execute 'vimgrep' '/'.a:args[-1].'/' join(a:args[:-2])
endfunction
これにより:grep
の代わりに
以下のような:Grep
コマンドが使えるようになります:
:Grep {file} ... {pattern}
:grep
での煩雑さは最初の引数が{pattern}であることが
原因なので、その逆で最後の引数が{pattern}であるコマンドがあれば
パターンの修正は<Up><C-w><C-w>...だけで済みます。
参考資料
kanaもどる
blog comments powered by Disqus