パターン検索にはackを利用していて、通常利用時には特に不満は無かったんですが、 ファイル数が多いディレクトリだと遅かったので、もっと他の方法が無いかと調べていたら ackの3〜5倍速いというThe Silver Searcherというものが あったので導入。
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 に記載されています。(要約しにくいので、原文を読んでください!)
The Silver Searcherの導入
Macの場合はhomebrewで導入
1
| |
2013/10/31 最近は下記でいけると新卒氏に教えてもらったので追記
1
| |
CentOS6、SL6はRPMが用意されているので、下記を利用
1 2 | |
ソースから導入する場合(コンパイルにautomakeとかpcre-develが必要だと思いますので適時入れてください)
1 2 | |
RHEL6系以外での利用も、specファイルが含まれているのでRPM作成も簡単に出来た。
The Silver Searcherの利用方法
The Silver Searcherはagというコマンドを用い、
1
| |
という感じで利用し、ほぼackと同じ。
実際に私の環境(MacBook Air)で、ackとagで実行時間を計測した結果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
3500個くらいのファイル検索でもackと比べて、agが高速なのがわかる。
多分ファイル数がディレクトリだとさらに効果がありそう。
実際にいろいろなディレクトリで何回か検索を実行してみても、agの方が高速でした。
VimからThe Silver Searcherを利用する
ackと同じで、Vimから使うことが多いと思うので、Vimから使えるようにする。 ag.vimというプラグインがあるので、それを利用。
Vundleを利用している場合は.vimrcに下記を記載してBundleInstall
1
| |
NeoBundleの場合は下記を記載してNeoBundleInstall
1
| |
Vim上から下記のような形で利用
1
| |
Vim上からも高速にパターン検索が出来るようになって素晴らしい。

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

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