vim-users.jp

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