Humanity

Edit the world by your favorite way

ソースコメントを除外するgrepプラグイン「coolgrep.vim」作った

ばよえ〜ん(訳:Vim Advent Calendar 2012への6回目の投稿です)
また間違えた!6連鎖目はじゅげむでした。


この記事はVim Advent Calendar 72日目の記事です。
前回は@yoshikawさんの端末vimでマウスを使うでした。

Vimのsyntax情報を利用する

Vim Advent Calendar 55日目の記事smartgrep.vim ソースコメントを除外するgrepプラグイン : Pebble On Softwareはすばらしいと思うのですが、いくつか気になる点を見つけました。

  1. .exeファイルを呼び出しているためWindowsのみしか対応していない
    • 勘違いでした。「Windows以外でもC++ソースがコンパイルできるOS(MacLinuxなど)なら対応している」とのことです。詳しくはブログコメント欄の@pebble8888さんのコメント参照。
  2. Vimはsyntax highlightするために「この部分はコメント」などの情報を持っているので、それを使えば構文解析しなくとも実現できる

Vimのsyntax highlightは膨大な数のフォーマットに対応しています。
デフォルトでインストールされているsyntaxファイルだけでもこんなにあります。

:echo globpath(&rtp, 'syntax/*.vim')
/usr/local/share/vim/vim73/syntax/2html.vim
/usr/local/share/vim/vim73/syntax/a2ps.vim
/usr/local/share/vim/vim73/syntax/a65.vim
/usr/local/share/vim/vim73/syntax/aap.vim
/usr/local/share/vim/vim73/syntax/abap.vim
/usr/local/share/vim/vim73/syntax/abaqus.vim
/usr/local/share/vim/vim73/syntax/abc.vim
/usr/local/share/vim/vim73/syntax/abel.vim
/usr/local/share/vim/vim73/syntax/acedb.vim
/usr/local/share/vim/vim73/syntax/ada.vim
/usr/local/share/vim/vim73/syntax/aflex.vim

(多すぎるので略。全部で581個ありました。繰り返しますがデフォルトでインストールされているものだけです)

syntax情報を利用すればもっと簡単に「コメントを無視するgrep」が実現できそうだったので、作ってみました。(コミットログ見れば分かりますが、実は@pebble8888さんの記事を見てから2時間ほどで作りました)

tyru/coolgrep.vim · GitHub

インストールすると「:CoolGrep」と「:CoolVimGrep」コマンドが使えるようになります。
それぞれ「:grep」と「:vimgrep」に対応するコマンドです。

使い方

:CoolGrep

「:grep」コマンドの書式がそのまま使えます。
'grepprg'オプションにセットしているコマンドの書式が使えます。
(UnixではgrepコマンドだったりWindowsではfindstrコマンドだったり)
詳しくは「:help :grep

:CoolGrep -i vim *.txt
:CoolVimGrep

「:vimgrep」コマンドの書式がそのまま使えます。
grepコマンドなどがインストールされている必要はありませんが、遅いです。
詳しくは「:help :vimgrep」

:CoolVimGrep /vim/i *.txt
:CoolVimGrep vim *.txt

:wqa!

次のVim Advent Calendarは@manga_osyoさんです。