配置vim支持源码浏览(vim+ctags+cscope)

配置vim支持源码浏览(vim+ctags+cscope) linux


介绍c++

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

 

组合介绍vim

vimlinux超强的文本编辑器。windows

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

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

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

准备测试

fedora系统的软件仓库已包括了上述几个软件包,若是没有安装能够经过下面命令直接在线安装spa

#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配置文件:http://cscope.sourceforge.net/cscope_maps.vim

 

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

 

使用

如今你能够进入一个源码目录作一个测试,

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

#ctags -R . && cscope -Rqb

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

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

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

#vim -t main

当前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 <F5>s :cs find s <C-R>=expand("<cword>")<CR><CR>

100 nmap <F5>g :cs find g <C-R>=expand("<cword>")<CR><CR>

101 nmap <F5>c :cs find c <C-R>=expand("<cword>")<CR><CR>

102 nmap <F5>t :cs find t <C-R>=expand("<cword>")<CR><CR>

103 nmap <F5>e :cs find e <C-R>=expand("<cword>")<CR><CR>

104 nmap <F5>f :cs find f <C-R>=expand("<cfile>")<CR><CR>

105 nmap <F5>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>

106 nmap <F5>d :cs find d <C-R>=expand("<cword>")<CR><CR>

....

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

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

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

 

后记

如上介绍仅是一个入门级的vim+ctagscscope配置使用文档,关于vim强大的插件支持能够打形成一个超级IDE的后续报道,但愿下一步能够补充,这个目前尚未研究。

相关文章
相关标签/搜索