パターン検索にはackを利用していて、通常利用時には特に不満は無かったんですが、ファイル数が多いディレクトリだと遅かったので、もっと他の方法が無いかと調べていたらackの3〜5倍速いというThe Silver Searcherというものがあったので導入。
公式に書いてあるThe Silver Searcherの特徴
ackの3〜5倍高速.gitignore、.hgignoreに記載されているものを検索対象から除外.agignoreに記載agというコマンド名で、ackと比べてコマンドが短い(33%減!)なぜ高速なのかはhttps://github.com/ggreer/the_silver_searcher#how-is-it-so-fastに記載されています。(要約しにくいので、原文を読んでください!)
Macの場合はhomebrewで導入
1 | |
2013/10/31 最近は下記でいけると新卒氏に教えてもらったので追記
1 | |
CentOS6、SL6はRPMが用意されているので、下記を利用
12 | |
ソースから導入する場合(コンパイルにautomakeとかpcre-develが必要だと思いますので適時入れてください)
12 | |
RHEL6系以外での利用も、specファイルが含まれているのでRPM作成も簡単に出来た。
The Silver Searcherはagというコマンドを用い、
1 | |
という感じで利用し、ほぼackと同じ。
実際に私の環境(MacBook Air)で、ackとagで実行時間を計測した結果。
1234567891011121314151617 | |
3500個くらいのファイル検索でもackと比べて、agが高速なのがわかる。多分ファイル数がディレクトリだとさらに効果がありそう。
実際にいろいろなディレクトリで何回か検索を実行してみても、agの方が高速でした。
ackと同じで、Vimから使うことが多いと思うので、Vimから使えるようにする。ag.vimというプラグインがあるので、それを利用。
Vundleを利用している場合は.vimrcに下記を記載してBundleInstall
1 | |
NeoBundleの場合は下記を記載してNeoBundleInstall
1 | |
Vim上から下記のような形で利用
1 | |
Vim上からも高速にパターン検索が出来るようになって素晴らしい。

当然zshの補完が効かないと話にならないので、zshの補完関数を書いた。
下記のように補完されます。
追記
zsh-completionsに出していたpull requestがmergeされたので、zsh-completionsからでも利用可能です。

ackと比較して動作もかなり高速だし、vim、zshから快適に使えるようになったので完全に切り替え。

Akira Maeda
@glidenote
このブログは個人的なものです。ここで述べられている内容は私の個人的な意見に基づくものであり、私の雇用者に一切の関係はありません