Google Tags(GTags)を試してみた(with Vim)


http://code.google.com/p/google-gtags/
http://google-code-updates.blogspot.com/2007/03/google-gtags-version-10.html


Google Tags(GTags)のメジャーバージョンがリリースされた様子。

これはなにかって言うと、要するにtagsファイルをサーバにおいて(メモリ上に展開されるらしい)、タグジャンプするときにサーバのデータを参照するctags。

みんながローカルで「ctags -R」を実行しなくてもいいってことだね。
なんか非常にGoogleらしい。

今のところ対応言語はC++JavaPythonのみ。
Googleオフィシャル言語だけかよ。。。


エディタは長いことVimを使ってるので、当然Vimから使いたいわけだけど、Pythonインタプリタが組み込まれてる必要があるので、めんどくさくて今まで試してなかった。

メジャーバージョンがリリースされたことだし試してみた。Emacsは知りません。


まずはVimPythonインタプリタを組み込む必要がある。

:echo has('python')

で1が返ってくる人はそのままでOK(あんまりいない気がする)。

なんか最近PerlRuby組み込みのVimが必要でめんどくさくてあきらめたVimプラグインがあったような気がしたので、いっそのこと全部入れちゃえってことで、PerlRubyPython組み込みのVimを作った。

./configure \
--enable-multibyte \
--enable-xim \
--enable-fontset \
--with-features=big \
--enable-perlinterp \
--enable-rubyinterp \
--enable-pythoninterp \
&& make && sudo make install
:echo has('perl')
1
:echo has('ruby')
1
:echo has('python')
1

よしOK。


GTagsのインストールは
http://code.google.com/p/google-gtags/wiki/GTagsInstallation
の通りで問題なし。
ディレクトリごと /usr/local/gtags にコピーしといた。


~/.vimrcに

source /usr/local/gtags/gtags.vim
nmap <C-]> :call Gtag(expand('<cword>'))<CR>

を追記してインストールは完了。

あとはExuberant Ctagsが必要だけど、まぁだいたい最近はもともと入ってるでしょう。


うちのリポジトリには対応してる言語で書かれたソースがないので(それも試さなかった理由のひとつ)、、、GTagsのソースそのもので試してみた。

GTagsのソースを展開したディレクトリで

/usr/local/gtags/gentags.py \
--etags=/usr/bin/etags \
--rtags=/usr/local/gtags/rtags.py \
--etags_to_tags=/usr/local/gtags/etags_to_tags.py

を実行してtagsファイルを作成。


サーバの指定はどうするのかなと思ってたら、gtags.pyを編集するみたい。
とりあえずローカルで動かしてるので、

"c++" : { "definition" : [("localhost", 2222)],

とした。サーバは複数記述できるみたい。深く追ってないので詳細は不明。


/usr/local/gtags/gtags \
--tags_file ./cpp.tags.gz \
--tags_port 2222 \
--gunzip

としてサーバを実行。


で適当なところでC-]すると、、、、出来た!結構速い。


実際に使うとすると、更新はどうするのかな。
Subversionだとpost-commitフックでgentags.py→reload-tags-fileかなぁ。


いまのところ個人的には使う予定はないけど、たぶんかなり便利です。GTags。


今のところ、Googleのコード(C++Pythonで書かれてる)が読めるのが一番のメリットだったりする。
バリバリのC++がステキ(Pythonはあんまりしらない)。
Google's Javaも読みたいなぁ。