globalを実際につかってみた
バグ取りも噛ねて製品のソースコードの構造を理解せよとの命令が出たので、最近覚えたglobalを早速使ってみました。まずはG*ファイルを生成させるために、ソースコードディレクトリのルートで
% gtags -v
としてG*ファイルを生成させます。それで、例えばHogeクラスが定義されてるファイルってどこだろう、ということになれば
% global Hoge path/to/Hoge
で一発で出ますし、それの中身を確認したいということになれば、Emacsからglobalを使うか、以下のようにコマンドします。
% global -x Hoge | less -T-
tでnext tag、Tでprevious tagです。:nと:pで操作するのではないので勘違いしないようにしてください。ただ、この方法だと定義周辺のコンテキストを確認できないようです。対策としては以下のようにファイル全体をlessする方法があります。
% global Hoge | xargs less
伝家の宝刀、xargsです。これはstdinを適当にsplitしてcommandに引き渡します。これによって、lessで:nで次のファイルにいったり:pで前のファイルにいったりすることができるようになるのです。ただこの方法では該当行まで飛んでくれないので、かなり不便です。代替策として以下のように根性をだしてlessする方法があります。
% global -x Hoge | awk '{ print "+"$2"G", $3 }' | xargs -n 2 less
qで次のファイル、C-cで終わりです。前のファイルには戻れませんが、そこそこ代替にはなっています。そうとう無茶していますが(笑
そもそもこの辺の処理はglobalが吸収すべきではないでしょうか。古き良きツールのgrepには-Cというマッチした行の周辺コンテキストを表示するコマンドがありますが、このような機能をglobalにもつけてほしいと思ってしまうのです。lessに丸投げにするにしても、lessのtags対応がいまいちなのでなんとも言えませんし。これはどうも自分で改造patch作ってmailinglistにpostしろという方向にベクトルが向いている雰囲気です。時間があるときになんとかしたいと思います。
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/coreblogentry.2006-07-20.8963268751/tbping