vimのgrepをackに変更してみた。

grep より何かと便利だという ack をインストールしたメモ。

ack

http://betterthangrep.com/

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
Terminal
1
$ sudo aptitude install ack-grep
Terminal
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 に追記。

~/.vimrc
1
set grepprg=ack-grep\ -a

使ってみる。

vim
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 に変えてから検索結果がおかしい。以前と結果が違うっぽい。

実行されてるコマンドを見ると

vim
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 を利用しているみたいなので作成します。

Terminal
1
$ sudo ln -s /usr/bin/ack-grep /usr/local/bin/ack

これでこれまでと同じように利用できます。

やっぱり .svn とか無いと非常に見やすいです。

以上です。

© 2018 磁力式駆動 All Rights Reserved.
Theme by hiero