better than grepなツールack がタイムラインでちょっと話題になっていた
ので、試してみました。find+grepより速くて良いね。

OSXならbrewでインストールするとお手軽なんでしょう。

% brew install ack

デフォルトで再帰検索してくれます。.gitとか.svnディレクトリは勝手に
無視してくれるようです。

% ack hoge
test/test-twittering-mode.el
405:    (setcdr (assoc 'in-reply-to-screen-name status) "hoge")
407:    (test-assert-string-equal " in reply to hoge"

検索対象の拡張子は"ack –help-types"で確認出来ます。-kオプションを
付けると、すべてのファイルを対象にします。

% ack -k hoge

ファイルやディレクトリも指定可能です。

# ファイル
% ack hoge twittering-mode.el

# ディレクトリ
% ack hoge test
test/test-twittering-mode.el
405:    (setcdr (assoc 'in-reply-to-screen-name status) "hoge")
407:    (test-assert-string-equal " in reply to hoge"

–nogroupオプションを付けるとgrep -nっぽい出力になります。

% ack --nogroup hoge
test/test-twittering-mode.el:405:    (setcdr (assoc 'in-reply-to-screen-name status) "hoge")
test/test-twittering-mode.el:407:    (test-assert-string-equal " in reply to hoge"

~/.emacs.d/init.elのgrep-find-command変数をこのように変更しました!

;; 変更前
(setq grep-find-command
      '("find . -type f -name '*' ! -path '*/.git/*' -print0 | xargs -0 grep -nH -e  /dev/null" . 76))

;; 変更後
(setq grep-find-command '("ack --nogroup --nocolor -k " . 28))

追記(2013-04-21):
.ctpファイルを検索してくれないので、~/.ackrcを新規作成して以下を
追加しました。“ack –help-types"で確認出来ます。

–type-add=php=.ctp

デフォルトは登録された拡張子のファイルだけ検索するようですね。php系
のファイルだけ検索したい時は–phpオプション、除外したい時は–nophp
オプションを付ければ良いみたいです。

参考: How to let ack support more filetypes? - Stack Overflow

追記(2013-08-04):
ack version2から検索対象のデフォルトが「全て」から「登録された拡張
子のみ」に変わったので、記事を書き換えました。