注:本文修改了原文部分内容
1.各个工具的主要功能:
- vim:这个是Linux
下功能十分强大的编辑器,就不说了。
- ctags:生成tag文件的命令,这个是其它工具的基础。
- taglist:
需要ctags的支撑,直接在左边列出函数列表,全局参数列表。
- cppcomplete:需要ctags的支撑,可以补全类型或者函
数名。
- cscope:cscope
比较强大,可以对函数以及部分类型定义进行跳转,但有些BUG,好像在某些条件下无法正确找到分析枚举的定义
- global:貌似和
cscope,taglist功能一样,据说对于大型的工程表现不错。
2.各个工具的安装:
- vim,ctags,cscope,global,
在系统安装时安装,或者使用apt-get安装(Debian)。
- 从下面地址下载vim的cscope插件,建立目录~/.vim
/plugin/,并放在其下
- cppcomplete
和 taglist 要到的扩展列表中下载
- taglist 的下载地址:
- cppcomplete
的下载地址:
建立目录
mkdir -p ~/.vim/plugin
将下载的cppcomplete.vim 和
taglist.vim拷贝到$HOME/.vim/plugin中。
安装了global后,最新4.8.6
以上版本有带vim的扩展,将它也拷贝到 $HOME/.vim/plugin.Debian 安装后的在:
/usr/share/doc/global/examples/gtags.vim.gz
需要拷贝到$HOME/.vim/plugin后
解压,解压方法:
gzip -d gtags.vim.gz
3.配置这些工具
- 修改一
下$HOME/.vimrc文件
使用cscope请添加如下内容,这样Ctrl-]的跳转将由cscope的tags进行分析
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current
directory
if filereadable("cscope.out")
cs add cscope.out
" else add database
pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
set cscopetag
set cscopequickfix=s-,g-,c-,d-,t-,e-,f-,i-
endif
|
4.使用这些工具
- 使用Cscope
cscope的tag生成最简单的方法是:
在
你的开发工程的最上层目录执行cscope-indexer,它会遍历下面的所有目录,生成两个文件,一个是cscope.files,这个文件记录需要
生成tags的文件名,可以手工修改,另一个是cscope格式的tags文件cscope.out。完成后,你在生成了cscope.out的目录打开
工程的任意文件,就可以使用Ctrl-]跳转查找类型定义了。
更多内容请参考下面两篇文章:
2.使用taglist
taglist的功能是即时生成当前文件的函数列表和全局变量列表,便于索引。
在vim中命令模式下使用
Tlist
打开或者关闭当前文件的索引;
TlistSync 立即在打开的索引窗口中定位当前的光标所在位置属于哪个函数或者结构定义中。
还有其
他命令,请参考它的帮助文件。
ctags的使用
其实cscope是用来替代ctags功能的,ctags的应用广泛,还有其他很
多的软件依赖它。
例如要生成cppcomplete需要的tags文件的话,需要运行下面的命令:
代码:
ctags
-n -f cppcomplete.tags --fields=+ai --C++-types=+p * -L cscope.files
注
意,我在最后使用了参数"-L cscope.files"
这仅仅是借用拉cscope生成的文件索引来帮助ctags去查询相关工程文件生成tags。
使用cppcomplete
cppcomplete
的使用我只是简单的发现它可以根据上述方法生成的tags文件来自动补全类型成员。
使用很简单,就是在你需要补全类型成员时,按F8键就可以拉。
它一般第一次使用时,需要让你确认是使用已有的tags文件还是再生成一次。一般我们自己控制生成tags文件的时机,它就使用就行拉。
但它也受
到ctags的分析能力比较差的限制,可能不是每次都能帮到你。
使用global
在工程的最上层目录执行命令:
gtags
等
待它完成所有需要的global自己格式的tags的生成
生成完后,需要的就是在生成tags的目录打开你的工程的任意文件,用如下命令查询相关
类型引用和关联关系:
代码:
Gtags xxxx 查找xxxx的定义
Gtags -r xxxx
查找xxxx的引用
Gtags -s xxxx 查找xxxx出现的地方
它的提示信息很有显,不如cscope更直观,但对
大型分析的比较完整。
有时它无法正常分析的类型 可以试试用带-s 的参数的方式找找类型定义。再不行,我就不清楚拉
5、
草草的收尾
我使用它们也是一点一点的摸索的没有系统的完整的使用过,也受限于本人的Linux使用经验和工作关系,所以非常简单的使用体会给大
家一个参考,希望能有所帮助。更希望后来者能不断补充相关的使用体会。大家都需要交流提高,呵呵。
-------------------------------------------------------
global
是一个程序分析器,但它在vim使用时配合的gtags.vim中生成的列表信息没有列出符合的信息原文。使用起来很不方便。
cscope
可以列出找到的匹配信息所在文件,行号以及函数。
global 却只是简单的列出所在文件和行号,后面跟着没有什么意义的查询信息原始内容。
解
决的方法也很简单。就是修改gtags.vim中显示信息部分。
修改
第 302 行:
原文:
代
码:
let cmd = 'global' . sep . '-tq' . option . sep . pattern
修改后:
代
码:
let cmd = 'global' . sep . '-xq' . option . sep . pattern
第
319 行:
原文:
代码:
let &efm="%m%\\t%f%\\t%l"
修改
后:
代码:
let &efm="%*[^ ]%*[ ]%l\ %f\ %m"