gnu global
源码标记,浏览源码挺好用的工具,轻量级的,简单易用。 gtags类似ctags,但是效率比ctags高,具体比较查看这里(OpenGrok使用相对比较复杂),而且未来支持的语言也比较多。对Linux-2.6.32源码390M的文件进行标签产出289MB的标签文件。
可以通过源码安装就OK wget http://tamacom.com/global/global-6.3.2.tar.gz; tar zxvf global-6.3.2.tar.gz; cd global-6.3.2; ./configure; make && make install
在需要查找的目录下运行gtags,会生成三个文件: GTAGS–定义的函数变量; GRTAGS–引用的函数变量; GPATH–函数变量所在文件的路径。
有用的命令:
- global -f DIR/fileC.c –color这个命令看这个文件下有哪些函数,比较有用,加-l在当前目录下查找
- global -r func函数在哪些文件中引用
- global -ax func函数所在的目录文件具体哪些行
- global -P file匹配文件目录文件,类似find ./ -type d | grep file
- global -g func匹配有func字符的文件,和grep功能一样
- 如果代码跟新了,需要更新标签文件,global -vu
通过globash进入global命令模式,其中show -e/v/l/g Nth分别用emacs,vi,less,mozilla 来浏览第N个文件标记所搜得关键词的内容,或者不指定用编辑器,采用环境变量EDITOR定义号的编辑器来查看(在.bashrc中添加export EDITOR=vim),个人比较喜欢用vim;使用tags查看已经查看过的tags;使用mark来标记查询过的标签tag,mark -l列出mark列表,mark Nth通过默认编辑器浏览mark的第N个文件;pop对记录过的查找标签命令的结果栈退出栈顶结果,并显示处理后的栈顶结果;cookie用来记录当前的文件夹,cookie -l查看cookie记录的文件夹,warp Nth返回列出的第N个文件夹。
其他简单的命令可以通过ghelp查看。
还有个htags是用来生成超文本文件的,方便在浏览器下查看,如果在命令行的开发坏境下,这个有个毛用哦~
使用gtags-cscope进入client模式具体操作按?帮助文档操作,(哈哈,貌似像个搜索引擎,tag的缓存文件采用的b-tree)。具体见https://www.gnu.org/software/global/globaldoc_toc.html#Requesting-the-initial-search
gtags,global其他具体命令,参考帮助文档或者查看Tutorial
gtags可以作为ctags的扩展进行使用,具体参考https://www.gnu.org/software/global/globaldoc_toc.html#Plug_002din
VIM中使用global
可以之间从安装好的global文件间share中将gtags.vim复制到~/.vim/plugin文件夹中:cp /usr/local/share/gtags/gtags.vim $HOME/.vim/plugin
或者如果使用vundle来管理的话,BundleSearch gtags 安装;或者直接cd $HOME/.vim/bundle && git clone https://github.com/vim-scripts/gtags.vim gtags,或者用git submodule来管理,原理都差不多,自己vim以前用vundle管理过,就直接将自己用的插件全部整合在一起了,去掉vundle插件,采用git submodule管理插件模块,但是vundle整体管理框架还在,vim配置。
在vim的命令模式下采用Gtags命令,参数和shell命令行一样,查找出来的list列表在quickfix window 中展现,操作的话与grep命令差不多,但是筛选比较细些,用-g参数就和grep一样,后面可以加上grep一样的参数。
具体参考https://www.gnu.org/software/global/globaldoc_toc.html#Vim-editor
总结
global作为一个轻量级的源码标记,浏览源码挺好用的工具,总体体验了吧,gtags生成的文件进行了细分,tag的检索效率相对提高了,如果源码比较大型的话,采用global -vu 来更新tag文件,要快很多;用vim进行开发,可以使用gtags.vim这个插件,与grep配合使用吧(当所检索的函数/变量tag比较模糊的时候,可以先用grep查询,在使用Gtags定位).好用程度,只有继续体验一段时间吧。。。