パターン検索には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から快適に使えるようになったので完全に切り替え。