grep より何かと便利だという ack をインストールしたメモ。
ackとは - はてなキーワード
http://d.hatena.ne.jp/keyword/ack
Perl で書かれた、ソースコード検索向きの grep プログラム。.svn/CVS/.git などのディレクトリを無視して検索したり、その他プログラミング言語の指定が出来たり、様々な機能がある。
環境
- OS: Ubuntu 12.04 64bit
- ack-grep: 1.92-1
- libfile-next-perl: 1.06-2
- vim: 7.3
1 | $ sudo aptitude install ack-grep |
1 | $ act-grep hoge |
でいけます。動作特に問題無し。
Vim でackを利用する。
ack.vim
なんていうプラグインもあるみたいですが、Ubuntuの場合は .vimrc
に書くだけでいいらしい。
Ubuntu Manpage: ack-grep - grep-like text finder
http://manpages.ubuntu.com/manpages/lucid/man1/ack-grep.1p.html
ここに書いているように以下を .vimrc
に追記。
1 | set grepprg=ack-grep\ -a |
使ってみる。
1 | :grep hoge . |
Quickfix には :ack-grep -a hoge .
と表示されているので問題なく動いている模様。
NERDTree からの検索でファイルが出てこない問題。
vimではプロジェクトツリーを表示するのに NERDTree を利用してます。
NERDTree
http://www.vim.org/scripts/script.php?script_id=1658
さらに、このツリー上から検索をできるプラグインをいれてます。
https://gist.github.com/masaakif/414375
これが非常に便利。検索したいディレクトリで m
でメニュー表示して g
で検索できます。簡単。
しかし、ack に変えてから検索結果がおかしい。以前と結果が違うっぽい。
実行されてるコマンドを見ると
1 | :ack-grep -a -rn hoge . |
となってるようです。これの n
がどうもまずいらしく調べてみると。
grep の
-n
オプション-n, –line-number 出力行と併せて行番号を表示する
ack の
-n
オプション-n, –no-recurse No descending into subdirectories
ようはサブディレクトリを検索しないよということになっているみたい。
プラグインのソースを見ると -rn
つけてます。もともとgrepで利用する前提なのでこれはしょうがない。
探してみるとack用のプラグインがあったので、そちらに差し替えることにします。
https://github.com/toritori0318/vim-nerdtree-plugin/
中身を .vim/bundle/The-NERD-tree/nerdtree_plugin/
に配置します。
コマンドは ack-grep
ではなく ack
を利用しているみたいなので作成します。
1 | $ sudo ln -s /usr/bin/ack-grep /usr/local/bin/ack |
これでこれまでと同じように利用できます。
やっぱり .svn
とか無いと非常に見やすいです。
以上です。