以下内容摘自:
http://www.jcwcn.com/html/Linux/21_10_53_771.htm
以vi为基础构造我的Linux开发环境。“VIM或EMACS做编辑器,GCC做编译器, automake做工程,doxygen做文档,cvs做管理”,这大概也是我希望的吧。另外有人提到svn,说是cvs的替代者。
安装步骤
1. 安装gcc等;
done in 《Ubuntu安装笔记》.
2. 升级vi到vim;
done in 《Ubuntu安装笔记》.
3. 安装ctags;
#sudo apt-get install ctags
4. 安装ctaglist;
http://www.vim.org/scripts/script.php?script_id=273
5. 安装cscope;
#sudo apt-get install cscope
6. 安装global;
#sudo apt-get install global
7. 安装cppcomplete
http://www.vim.org/scripts/script.php?script_id=273
工具简介(参考2)
总体使用的感觉定位查找类型定义基本可以用,但自动补全类型方面由于ctags的功能有限,感觉在大工程时,不一定很好用。
大型程序一定要global的参与,它的分析比较全面,但在vim中的提示信息有限。
taglist 精干,需要ctags的支撑 ,直接可以在左边列出函数列表,全局参数列表。(可以排序)
cscope 比较强大,可以对函数以及部分类型定义进行跳转,但有些BUG,好像在某些条件下无法正确找到分析枚举的定义。
cppcomplete 需要ctags的支撑,可以补全类型或者函数名(可不是普通Ctrl+P/N的那种)
global 新版本可以嵌入vim使用,提供比较完整解析和类型索引,和cscope比,稍微差些的就是对类型引用的打印列表中没有标识这个引用在什么函数中进行的。其实我的感觉global可能不是为vim所生,它的主要目的是用html的方式进行表达相关的关联关系和索引,使用起来感觉没有cscope的那么贴切。
VIM
VIM在本机上被安装到/usr/share/vim/vim70目录下(用$VIM代指)。可以通过修改$VIM/plugin, $HOME/.vim下的文件内容和$HOME/.vimrc来配置VIM参数。
使用gvim或者vim -g可以启动图形界面的vim。
VIM比如Ctrl-N可以实现自动补全,[I 可以查看光标所在处的函数的声明,Ctrl-]跳转到函数声明所在的文件,gd则是在当前文件跳转到局部变量的声明处。
CtagList
在VIM中用
“:TlistToggle” command to open/close the taglist window.
“:help taglist” command to get more information about using the taglist plugin.
Ctags
Q:如何看到标准库文件中的定义?
A: 在你的目录下建一个链接到标准库的源代码,然后
ctags -R *
vi -t printf
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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 的参数的方式找找类型定义。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.