*iroi*

mechairoi の Blog

gtags(GNU global)をperlとかで使う

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付属のとかだと駄目です.

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も生成出来た.