LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 06-02-05, 03:01 第 1 帖
听峰
 
听峰 的头像
 
 
注册会员  
  注册日期: Feb 2003
  帖子: 1,918
  精华: 6
 

标题: vim + ctags + taglist + cscope + cppcomplete + global 使用初探


由于本人比较喜欢在终端状态下的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/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
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使用经验和工作关系,所以非常简单的使用体会给大家一个参考,希望能有所帮助。更希望后来者能不断补充相关的使用体会。大家都需要交流提高,呵呵。







__________________
AthlonXP 1800+
K7N2G【nforce2-IGP】(GF4mx,ALC650,LAN,RAID,SATA,USB2,IEEE1394)
2*512 KS400
SG 7200.7 80+160G
MAG 796FDX5
Debian.Lenny(2.6.26),FVWM 2.5.26,GNOME 2.22
  听峰 当前离线   回复时引用此帖
旧 06-02-06, 19:25 第 2 帖
听峰
 
听峰 的头像
 
 
注册会员  
  注册日期: Feb 2003
  帖子: 1,918
  精华: 6
 

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"
  听峰 当前离线   回复时引用此帖
旧 06-03-05, 21:25 第 3 帖
wwxx
 
 
 
注册会员  
  注册日期: Feb 2005
  帖子: 67
  精华: 1
 

在用cppcomplete 的时候用F8补全的时候如果有多个匹配,怎么切换阿,比如一个类有多个函数,怎么在输入 A. 后选择需要的那个函数.
  wwxx 当前离线   回复时引用此帖
旧 06-03-07, 23:22 第 4 帖
homesp
 
homesp 的头像
 
 
注册会员  
  注册日期: Jun 2004
  我的住址: 天津
  帖子: 1,487
  精华: 1
 

不错,回头试试看







__________________
Debian Testing

Dell D630
2G RAM
Nvidia Quadro NVS 135m display card
  homesp 当前离线   回复时引用此帖
旧 06-03-08, 00:34 第 5 帖
听峰
 
听峰 的头像
 
 
注册会员  
  注册日期: Feb 2003
  帖子: 1,918
  精华: 6
 

引用:
作者: wwxx
在用cppcomplete 的时候用F8补全的时候如果有多个匹配,怎么切换阿,比如一个类有多个函数,怎么在输入 A. 后选择需要的那个函数.

一种方法是不停的按F8,这样它会列出所有的成员。如果你记得部分开头字母,那么你填写一些,再按F8,它会找那些匹配你输入的开头字母的这些成员。
  听峰 当前离线   回复时引用此帖
旧 06-05-08, 12:30 第 6 帖
jojogohome
 
 
 
注册会员  
  注册日期: Sep 2005
  我的住址: 浙江温岭
  帖子: 109
  精华: 0
 

http://cscope.sourceforge.net/cscope_vim_tutorial.html
有个vim的插件和教程







__________________
debian
初学linux
请多多指教
  jojogohome 当前离线   回复时引用此帖
旧 07-04-13, 16:25 第 7 帖
epingnet
 
 
 
注册会员  
  注册日期: Jan 2005
  帖子: 222
  精华: 0
 

这么好的东西怎么没人顶,晚上试试

Thanks for shared!







__________________
inurl:f=58 site:linuxsir.org/bbs keyword
  epingnet 当前离线   回复时引用此帖
旧 07-05-07, 01:13 第 8 帖
mslk
 
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 3
  精华: 0
 

cscope在windows下使用mingw编译的方法
http://linux.chinaunix.net/bbs/viewt...php?tid=897614

编译好的cscope15.6-win32在这里下载:
http://linux.chinaunix.net/bbs/attac...php?aid=177425
  mslk 当前离线   回复时引用此帖
旧 10-04-30, 15:15 第 9 帖
erwin.zeez
 
 
 
注册会员  
  注册日期: Apr 2010
  帖子: 2
  精华: 0
 

有你们使用(小狗Linux)的?
在中国人自己做了也修改
我用它米
你可以在网上找到它
伟大







__________________
ERWIn
  erwin.zeez 当前离线   回复时引用此帖
旧 10-04-30, 15:16 第 10 帖
erwin.zeez
 
 
 
注册会员  
  注册日期: Apr 2010
  帖子: 2
  精华: 0
 

抱歉,我刷新页面,我把一个重复的帖子
抱歉

此帖于 10-04-30 15:17 被 erwin.zeez 编辑. 原因: 抱歉,我刷新页面,我把一个重复的帖子 抱歉
  erwin.zeez 当前离线   回复时引用此帖
旧 10-05-02, 11:50 第 11 帖
dengx
 
dengx 的头像
 
 
注册会员  
  注册日期: Dec 2009
  帖子: 27
  精华: 0
 

mark at first , then check it .







__________________
应用不在乎技术, 技术在乎应用!
  dengx 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 21:27


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org