etagsは使いにくいしgtagsは対応ファイルフォーマットが少ないしと思って色々調べていたらExuberant ctagsを使ってGTAGSを作れるようなのでやってみた.ちゃんとした機能ではなくgtagsのプラギン例のようです. ctagsが元になってるので global -rはできないですが、global -cなどはperlで使えてます. 以下手順.
- Exuberant ctagsをインストール
$ ctags --version Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert Compiled: Aug 17 2010, 17:33:33 Addresses: <?@?>, http://ctags.sourceforge.net Optional compiled features: +wildcards, +regex
普通は入れてますね. emacs付属のとかだと駄目です.
- GNU GLOBAL source code tagging systemのgtagsをソースコードから入れます.バージョンは5.9.2でした.
plugin-example/READMEに書いてあるようにctagsのパスをつけて
./configure --with-exuberant-ctags=/usr/bin/ctags; make; sudo make install;
- このままだとpackage名でjumpできず *.pm, *.tがperlのコードして扱われないので, 設定ファイルを修正してやります.
cp /usr/local/share/gtags/gtags.conf ~/.globalrc
--- /usr/local/share/gtags/gtags.conf 2010-11-28 15:25:21.167584987 +0900 +++ .globalrc 2010-11-28 17:20:45.211584987 +0900 @@ -34,18 +34,19 @@ # See gtags(1). #--------------------------------------------------------------------- common:\ - :skip=GPATH,GTAGS,GRTAGS,GSYMS,HTML/,HTML.pub/,html/,tags,TAGS,ID,y.tab.c,y.tab.h,cscope.out,cscope.po.out,cscope.in.out,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,autom4te.cache/: + :skip=GPATH,GTAGS,GRTAGS,GSYMS,HTML/,HTML.pub/,html/,tags,TAGS,ID,y.tab.c,y.tab.h,cscope.out,cscope.po.out,cscope.in.out,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,autom4te.cache/,.git/: gtags:\ :tc=common:\ :langmap=c\:.c.h,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml: # # plugin parser # plugin-example|Example of function layer plugin parser:\ - :tc=common:extractmethod:\ + :tc=common:\ :langmap=c\:.c.h,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml:\ :langmap=fortran\:.f.for.f77.f90.f95,pascal\:.p.pas,c#\:.cs,lisp\:.l.el.lisp,scheme\:.scm:\ - :langmap=awk\:.awk,ruby\:.rb,perl\:.pl,python\:.py,vim\:.vim,sh\:.sh:\ + :langmap=awk\:.awk,ruby\:.rb,perl\:.pl.pm.t,python\:.py,sh\:.sh:\ :gtags_parser=c\:/usr/local/lib/gtags/exuberant-ctags.la:\ :gtags_parser=yacc\:/usr/local/lib/gtags/exuberant-ctags.la:\ :gtags_parser=asm\:/usr/local/lib/gtags/exuberant-ctags.la:\
(*.vimはSession.vimがあるとgtagsが死んでしまうので消した)
gtags --gtagslabel=plugin-example
でそれっぽいGTAGSとかのファイルが生成されて使えます.
globalの機能が全て使えるわけでは無いですが,
etagsのelispがなんとも近寄り難い感じだったので満足です.
使わないけどもhtagsでHTMLも生成出来た.