読者です 読者をやめる 読者になる 読者になる

ack.vim - vim から ack の検索結果を使う

vim で、カレントディレクトリ以下のファイルから文字列を検索し、quickfix リストで眺めたいとき

" :vim は :vimgrep の省略
:vim /foo/j **/*
:cwin

と毎回打っていたんですが、面倒だったりバイナリファイルにマッチすると遅くなったりしてしまったりしてしまうため、コマンドラインからソース検索でよく使う ack を利用し、検索結果があれば quickfix を表示する(カーソル移動はしない) vim plugin の ack.vim を作りました。

:Ack foo " カレントディレクトリ以下のすべてのファイルから文字列 foo を検索
:Ack --perl use " カレントディレクトリ以下の perl コードから文字列 use を検索

また .vimrc で

let g:AckCmd='ack-grep' " ack-grep コマンドで検索する
let g:ActAllFiles=0 " すべてのファイル検索を無効

みたいなオプションをつけることが出来ます。
と、ack.vim を作ったは良いんですが、一年前にすでに同じような機能の ack.vim が実装されてたり、最近の ack では端末出力で無い場合、デフォルトで grep と同様な出力になったため、

:set grepprg=ack\ -a

で問題なしに vim の grepprg として利用できたりしてしまったり、お気に入りの設定を ~/.ackrc に書けるようになったり(--all などを設定ファイルで指定できる)、ack.vim のメリットは :Ack foo であまり手間をかけず quickfix を開けるのと、ack へオプション引数を渡せるぐらいに…。
ちなみに ack 同様のプログラムとして、Rak という ruby プログラムがありますが、rubygems の読み込みコストなどで起動に時間がかかるので、ack の方を愛用してます。