分享
 
 
 

vim+ctags+taglist+cscope+cppcomplete+global

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

由于本人比较喜欢在终端状态下的vim,所以gvim下的扩展使用的不多。这里介绍的也是我简单的使用以上扩展的一点点体会。请大家指正。 emacs 不会用,也没有比较过拉。

1、大体感觉,(因为使用时间不长,不全面)

总体使用的感觉定位查找类型定义基本可以用,但自动补全类型方面由于ctags的功能有限,感觉在大工程时,不一定很好用。

大型程序一定要global的参与,它的分析比较全面,但在vim中的提示信息有限。

taglist 精干,需要ctags的支撑 ,直接可以在左边列出函数列表,全局参数列表。(可以排序)

cscope 比较强大,可以对函数以及部分类型定义进行跳转,但有些BUG,好像在某些条件下无法正确找到分析枚举的定义。

cppcomplete 需要ctags的支撑,可以补全类型或者函数名(可不是普通Ctrl+P/N的那种)

global 新版本可以嵌入vim使用,提供比较完整解析和类型索引,和cscope比,稍微差些的就是对类型引用的打印列表中没有标识这个引用在什么函数中进行的。 其实我的感觉global可能不是为vim所生,它的主要目的是用html的方式进行表达相关的关联关系和索引,使用起来感觉没有cscope的那么贴 切。

2、相关的扩展的安装

代码:

apt-get install exuberant-ctags cscope global

cppcomplete 和 taglist 要到www.vim.org的扩展列表中下载。

taglist 的下载地址:

http://www.vim.org/scripts/script.php?script_id=273

cppcomplete 的下载地址:

http://www.vim.org/scripts/script.php?script_id=527

然后在 建立目录

代码:

$HOME/.vim/plugin

将下载的cppcomplete.vim 和 taglist.vim拷贝到$HOME/.vim/plugin中。

安装了global后,最新4.8.6 以上版本有带vim的扩展,将它也拷贝到 $HOME/.vim/plugin

debian sid 版本global安装后扩展文件在

代码:

/usr/share/doc/global/examples/gtags.vim.gz

需要拷贝到$HOME/.vim/plugin后解压,解压方法:

代码:

gzip -d gtags.vim.gz

3、使用这些工具

1)准备工作,先修改一下$HOME/.vimrc文件

为了更好的使用cscope请添加如下内容,这样Ctrl-]的跳转将由cscope的tags进行分析。

代码:

if has("cscope")set csprg=/usr/bin/cscopeset csto=0set cstset nocsverb" add any database in current directoryif filereadable("cscope.out")cs add cscope.out" else add database pointed to by environmentelseif $CSCOPE_DB != ""cs add $CSCOPE_DBendifset csverbset cscopetagset cscopequickfix=s-,g-,c-,d-,t-,e-,f-,i-endif

2)使用cscope

cscope的tag生成最简单的方法是:

在你的开发工程的最上层目录执行cscope-indexer,它会遍历下面的所有目录,生成两个文件,一个是cscope.files,这个文件记录需要生成tags的文件名,可以手工修改,另一个是cscope格式的tags文件cscope.out。

完成后,你在生成了cscope.out的目录打开工程的任意文件,就可以使用Ctrl-]跳转查找类型定义了。

代码:

cs f s xxxx 查找xxxx出现的地方,它能详细列出哪些文件的哪行的哪个函数引用,以及该行的内容,比较不错。 :)

它的所有命令的使用请参考:

代码:

help cscope

3)使用taglist

taglist的功能是即时生成当前文件的函数列表和全局变量列表,便于索引。

在vim中命令模式下使用

Tlist 打开或者关闭当前文件的索引;

TlistSync 立即在打开的索引窗口中定位当前的光标所在位置属于哪个函数或者结构定义中。

还有其他命令,请参考它的帮助文件。

4)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。

5)使用cppcomplete

cppcomplete的使用我只是简单的发现它可以根据上述方法生成的tags文件来自动补全类型成员。

使用很简单,就是在你需要补全类型成员时,按F8键就可以拉。它一般第一次使用时,需要让你确认是使用已有的tags文件还是再生成一次。一般我们自己控制生成tags文件的时机,它就使用就行拉。

但它也受到ctags的分析能力比较差的限制,可能不是每次都能帮到你。

6)使用global

在工程的最上层目录执行命令:

gtags

等待它完成所有需要的global自己格式的tags的生成

生成完后,需要的就是在生成tags的目录打开你的工程的任意文件,用如下命令查询相关类型引用和关联关系:

代码:

Gtags xxxx 查找xxxx的定义Gtags -r xxxx 查找xxxx的引用Gtags -s xxxx 查找xxxx出现的地方

它的提示信息很有显,不如cscope更直观,但对大型分析的比较完整。

有时它无法正常分析的类型 可以试试用带-s 的参数的方式找找类型定义。再不行,我就不清楚拉

4、草草的收尾

我使用它们也是一点一点的摸索的没有系统的完整的使用过,也受限于本人的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"

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有