Vim Advent Calendar 2012 55日目の記事です。
こんにちは@pebble8888です。自作したvimのプラグインについて書きます。
プラグイン名はsmartgrep.vimです。
外部grepバイナリsmartgrepと合わせて使うgrepプラグインです。
唯一の機能は、「ソースコメントをgrep結果から除外できる」です。
過去のソースがコメントアウトされて残っている部分を除外したり、
コメント内に説明のために関数名、変数名などが書かれている部分を除外する
のが目的です。
if( isCute( hermionie ) && isBrave( harry ) ){
/ BUGFIX
petrify( harry );
/
petrify( hermionie );
}
例えば、上記のソースで普通に"petrify"でgrepすると、
petrify( harry );
petrify( hermionie );
の2行が出力されますが、
petrify( hermionie );
の1行だけが出力されて欲しいのです。
最近は、subversionやgitの普及で過去のソースをコメントアウトして
残すということが少なくなったと思います。
ですが、関係のない行を極力grep結果に出さないことは
効率化を求めるvimユーザーのニーズに合っていると思います。
ちなみに秀丸エディタにはだいぶ前から、この機能がありますが、vim用のは
誰も作ってくれなさそうなので、自分で作ることにしました。
関数や変数の宣言部をgrepしたい時は、ヘッダファイル(.h)のみを対象にしたり、
関数や変数の使用部分をgrepをしたい時はすべてのファイルを対象にしたり
といった使い分けが可能です。
コメント記法が、/**/ // #if 0の言語
(C, C++, Objective-C, C#, Java Script)
Ruby(#)
Python(#,""")
に対応しています。
個人的には主にC,C++,Objective-C,Pythonで使っています。
[追記2013-05-06]
対応OSはWindows/Mac/Unixとなっています。
<使い方>
例えば、次のソースファイルを開いているとしましょう。
ここで「IDEEditorArea」という単語をgrepしたい場合、
IDEEditorAreaの単語上にカーソルがある状態で、「,g」とタイプします。
すると、以下のようにIDEEditorAreaをlgrepした時のようにgrep結果が
ロケーションリストとして現れます。
ロケーションリストはvim7で追加された機能です。
lgrepとの違いは、ソースコメント内の「IDEEditorArea」が含まれないことと、
設定したディレクトリ配下の全てのソースファイルが対象になることです。
lopenコマンドを利用しているため、ウィンドウ分割した場合に、2つ以上の
ロケーションリストを利用したりもできます。
また、grepしたい単語上にカーソルがある状態で「,h」とタイプすると.hのファイルのみ
を対象にしたり、「:R {検索する単語}+Enter」で単語を入力することもできます。
なお、外部grepバイナリを利用しているのは処理速度のためです。
ソースの量が10万ステップ以上になると内部grep(vimgrep)では遅すぎて使いづらいのです。
<インストール方法>
target="_blank">https://github.com/pebble8888/smartgrep
上記からgit cloneで取得して、
smartgrep.vimを設定し、さらにsmartgrepバイナリを
パスが通った位置に置いて下さい。
バイナリは用意していないので、WindowsはminGWやVC6など、
Unix,Mac環境ではmakeで自前ビルドして下さい。
その後、~/.vimrcファイルに以下の一行を追加します。
let g:smartgrep_basedir="/hogehoge/fugafuga"
Windowsの場合は
let g:smartgrep_basedir="C:\hogehoge\fugafuga"
のようにします。
/hogehoge/fugafugaの部分はgrepを行う基準ディレクトリを設定します。
grepはこのディレクトリ配下のソースファイル全てに対して行われます。
以上です。
Vim Advent Calendar 2012 明日は@tyru1さんです。