Chinaunix首页 | 论坛 | 博客
  • 博客访问: 144983
  • 博文数量: 43
  • 博客积分: 264
  • 博客等级: 二等列兵
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-25 08:46
文章分类

全部博文(43)

文章存档

2015年(4)

2014年(1)

2012年(38)

分类:

2012-07-11 08:29:29

作者 good bai    
介绍

windows下流行的源码阅读软件是source insight,而linux则没有与其可匹敌图形化的源码阅读软件,现在日趋流行的eclipse开发软件,虽然可以较好的支持源码中符号之间相互跳转,但总体感觉不是十分强大和好用,可能因为eclipse是通过cdt插件的形式来支持c/c++项目,很多方面表现还有待提高。而且eclipse在终端下无法使用,而今天的主角vim+ctags+cscope可谓是无所不能,真真的强大之极。下面是关于这个组合配置和使用的简单介绍,更多的功能可以日后慢慢摸索。


组合介绍

vimlinux超强的文本编辑器。

ctags对源代码文件扫描生成交叉引用符号表,支持大多数主流语言,但相对功能简单,配合vim可以实现从变量和函数的调用点到定义点的跳转。

cscope可以理解为ctags的加强版,但支持语言的种类要少一些,完全支持c语言。它生成的源码符号引用表更加复杂,配合vim可以实现符号各引用点之间任意切换(比如从函数调用点到定义点,从定义点到调用点等)。

关于更多的vim,ctgascscope的知识可以去它们的官网,也可以查看man手册了解一些基本的使用信息和帮助。

准备

fedora系统的软件仓库已包括了上述几个软件包,如果没有安装可以通过下面命令直接在线安装

#yum install vim-enhanced ctags cscope

vim-enhancedvim的一个完全功能版,最好安装此版本。

配置

vim

为了使vim更好支持浏览和编写程序代码,可以启用一些默认没有启用vim的扩展功能,如显示行号,代码自动缩进等。

#vim /etc/vimrc

#增加此行默认将开启vim行号显示功能

set number


cscope

cscope需要一个配置文件才能和vim一起工作,在下面这个地址可以找到一份cscope官方的目标配置文件,下载或者拷贝该文件至/usr/share/vim/vimxx/plugin/目录。

cscope配置文件:


到此一个基于vim的源码阅读环境已经配置完成。


使用

现在你可以进入一个源码目录做一个测试,

进入源码项目根目录运行下面命令建符号立交叉引用文件:

#ctags -R . && cscope -Rqb

命令成功执行后将在当前目录下生成四个文件,分别为cscope.in.outcscope.outcscope.po.outtags,他们是ctagscscope生成的索引文件。

如何使用这个功能,其实这个得看你有什么需求了,下面举例两个应用例子:

1 把编辑器定位到项目源码中main函数开始的位置上,操作如下:

#vim -t main

2 当前vim编辑器中,光标指在read函数上,这是该函数的一个调用,我相要查看它的定义:

操作:把光标定位到read上后,可以直接通过快键Ctrl+]实现跳转。

注:如上事例操作的前提是操作目录须和上面提到的4个索引文件所在的目录为同一目录。

推荐:把生成索引文件的命令写入一个脚本文件并放到/bin/目录,这样以后就可以通过运行该脚本便捷快速的生成项目源码文件的索引文件。


出错解决

再存在索引文件的目录运行vim时,程序提示添加了cscope数据库cscope.out,按回车可以确认。如果再此步中出现载入重复的数据库错误,那是因为vimrc文件和cscope.vim配置文件中出现两次重复的载入操作,可以通过修改vimrc(或者cscope.vim)文件修正,如下:

#vim /etc/vimrc

...

38 " add any database in current directory

39 if filereadable("cscope.out")

40 "cs add cscope.out

41 " else add database pointed to by environment

42 elseif $CSCOPE_DB != ""

43 " cs add $CSCOPE_DB

44 endif

可以像如下一样使用双引号注释掉40行和43行,甚至可以直接删除3843行的代码,此段代码在cscope.vim文件中有一份完整的拷贝。


Cscope快键解析

vimcscope的功能可以通过一些快键操作实现,这些快键定义在cscope.vim配置文件中

查看该文件内容:

#vim /usr/share/vim/vimxx/plugin/cscope.vim

....

99 nmap s :cs find s =expand("")

100 nmap g :cs find g =expand("")

101 nmap c :cs find c =expand("")

102 nmap t :cs find t =expand("")

103 nmap e :cs find e =expand("")

104 nmap f :cs find f =expand("")

105 nmap i :cs find i ^=expand("")$

106 nmap d :cs find d =expand("")

....

快捷配置行解析,nmap表示定义vim非编辑模式下快键关键字,s表示快键组合F5s键,cs find c 表示前定义快键等效的命令组合,再后面的内容是实现快键发生时传递vim中当前光标所在的字符内容。cscope配置中默认的快键主键是Ctrl+/,但这组快键组合在我的机器却无法工作,所以我把默认组合键主键都换成了F5,如果你的情况类似,也可以仿照次方式另设一个主键。再运行的vim中如果想查看设置的快键是否生效,可以通过命令查询,如输入:nmap回车可以查看当前vim中已设置的所有非编辑模式下的快键。

下面是一条查找函数所有调用点的操作事例(已上面配置文件为例):

如果你想查询read函数的所有调用点,移动光标到read单词上,按F5+s快键组合后,将会在vim编辑界面的下部列出所有read符号引用条目。


后记

如上介绍仅是一个入门级的vim+ctagscscope配置使用文档,关于vim强大的插件支持可以打造成一个超级IDE的后续报道,希望下一步可以补充,这个目前还没有研究。


参考资料

Cscope官方手册(强烈推荐)

Ctags manual(英文)

Vim manual


阅读(1937) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~