使用Vim开发软件-程序员的利器CScope

转载 2007年09月13日 16:36:00

本节所用命令的帮助入口:

:help cscope

在前面的文章中介绍了利用ctags生成的tag文件,跳转到标签定义的地方。但如果想查找函数在哪里被调用,或者标签在哪些地方出现过,ctags就无能为力了,这时需要使用更为强大的cscope

Cscope具有纯正的Unix血统,它最早是由贝尔实验室为PDP-11计算机开发的,后来成为商用的AT&T Unix发行版的组成部分。直到20004月,这个工具才由SCO公司以BSD license开源发行。

Cscope的主页在http://cscope.sourceforge.net/,如果你的计算机上没有cscope,你可以在此处下载它,在写本文时,它的最新版本是15.6。安装它非常简单,你只需要在cscope的源代码目录中执行下面三条命令:

./configure
make
make install

windows上也可以使用cscope,在cscope的主页上可以下载到由DJGPP编译器编译的windows版的cscope,不过这个版本不能和VIM一起工作。或者你可以下载cygwin工具包(http://www.cygwin.com/),这个工具包中也包含了cscope

http://iamphet.nm.ru/cscope/Sergey Khorev预编译的一个Win32版本的cscope,这个版本的cscope可以很好的与windows版本的VIM搭配使用。

要使用cscope的强大功能,首先需要为你的代码生成一个cscope数据库。生成数据库很简单,在你的项目根目录运行下面的命令:

cscope -Rbq

这些选项的含义见后面。这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。

在缺省情况下,cscope在生成数据库后就会进入它自己的查询界面,我们一般不用这个界面,所以使用了-b选项。如果你已经进入了这个界面,按CTRL-D退出。

Cscope在生成数据库中,在你的项目目录中未找到的头文件,会自动到/usr/include目录中查找。如果你想阻止它这样做,使用-k选项。

Cscope缺省只解析C文件(.c.h)lex文件(.l)yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过C++Java后缀的文件。如果你希望cscope解析C++Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。通常我们使用find来生成cscope.files文件,仍以VIM 7.0的源代码为例:

cd ~/src/vim70
find . –type f > cscope.files
cscope -bq

这条命令把~src/vim70目录下的所有普通文件都加入了cscope.files,这样,cscope会解析该目录下的每一个文件。上面的cscope命令并没有使用-R参数,因为在cscope.files中已经包含了子目录中的文件。

注意find命令输出的文件以相对路径表示,所以cscope.out的索引也相对于当前路径。如果你要在其它路径中使用当前的cscope.out,需要使用下面介绍的-P选项。

Cscope只在第一次解析时扫描全部文件,以后再调用cscope,它只扫描那些改动过的文件,这大大提高了cscope生成索引的速度。

下表中列出了cscope的常用选项:

-R: 在生成索引文件时,搜索子目录树中的代码
-b:
只生成索引文件,不进入cscope的界面
-q:
生成cscope.in.outcscope.po.out文件,加快cscope的索引速度
-k:
在生成索引文件时,不搜索/usr/include目录
-i:
如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir:
-I选项指出的目录中查找头文件
-u:
扫描所有文件,重新生成交叉索引文件
-C:
在搜索时忽略大小写
-P path:
在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

要在VIM中使用cscope的功能,需要在编译VIM时选择“+cscope”VIMcscope接口先会调用cscope的命令行接口,然后分析其输出结果找到匹配处显示给用户。

VIM中使用cscope非常简单,首先调用cscope add命令添加一个cscope数据库,然后就可以调用cscope find命令进行查找了。VIM支持8cscope的查询功能,如下:

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g:
查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d:
查找本函数调用的函数
c:
查找调用本函数的函数
t:
查找指定的字符串
e:
查找egrep模式,相当于egrep功能,但查找速度快多了
f:
查找并打开文件,类似vimfind功能
i:
查找包含本文件的文

例如,我们想在VIM 7.0的源代码中查找调用do_cscope()函数的函数,我们可以输入::cs find c do_cscope,回车后发现没有找到匹配的功能,可能并没有函数调用do_cscope()。我们再输入:cs find s do_cscope,查找这个C符号出现的位置,现在VIM列出了这个符号出现的所有位置。

我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能,但它是在交叉索引数据库中查找,速度要快得多。

VIM提供了一些选项可以调整它的cscope功能:

<!--[if !supportLists]-->-          <!--[endif]-->cscopeprg选项用于设置cscope程序的位置。

<!--[if !supportLists]-->-          <!--[endif]-->cscopequickfix设定是否使用quickfix窗口来显示cscope的结果,详情请:help cscopequickfix

<!--[if !supportLists]-->-          <!--[endif]-->如果你想VIM同时搜索tag文件以及cscope数据库,设置cscopetag选项;

<!--[if !supportLists]-->-          <!--[endif]-->cscopetagorder选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库,设置为1先查找tag文件。我通常设置为1,因为在tag文件中查找到的结果,会把最佳匹配列在第一位。

VIM的帮助页中给出了使用cscope的建议方法,使用命令:help cscope-suggestions查看。

下面是我的vimrc中关于cscope接口的设置:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=1
  set cst
  set nocsverb
  " add any database in current directory
  if filereadable("cscope.out")
      cs add cscope.out
  endif
  set csverb
endif

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>

下面的两个链接是cscope主页提供的cscope使用方法,也可以作为参考:

VIM/cscope指导:http://cscope.sourceforge.net/cscope_vim_tutorial.html

在大项目中使用cscopehttp://cscope.sourceforge.net/large_projects.html
 

VIM的网站上有很多与cscope相关的插件,有兴趣可以去看一下。这里是搜索结果:点这里

我以前写的一篇关于VIM/ctag/cscope的文章:

http://blog.csdn.net/easwy/archive/2006/08/31/1150909.aspx

 

[参考文档]

<!--[if !supportLists]-->1.       <!--[endif]-->VIM帮助文件

<!--[if !supportLists]-->2.       <!--[endif]-->http://vimcdoc.sourceforge.net/

<!--[if !supportLists]-->3.       <!--[endif]-->http://cscope.sourceforge.net/

<!--[if !supportLists]-->4.       <!--[endif]-->http://iamphet.nm.ru/cscope/

<!--[if !supportLists]-->5.       <!--[endif]-->cscope手册

 

[尾记]

本文可以自由应用于非商业用途。转载请注明出处。

原文链接:http://blog.csdn.net/easwy

 

[版本]

03Apr07, easwy, v0.1, initial version

责任编辑 webmaster

 

 

vi/vim使用进阶: 程序员的利器 – cscope

原文链接:http://easwy.com/blog/archives/advanced-vim-skills-cscope/ 本节所用命令的帮助入口: :help cscope 在前...

vim:打造Linux程序员的编辑利器(ctags+cscope+taglist+code_complete)

原文 : http://smilejay.com/2012/10/vim-for-linux-programmer/ 在2年前,写过一篇文章“Vim:打造Linux C/C++程序员的编辑器...

VIM:打造LINUX程序员的编辑利器(CTAGS+CSCOPE+TAGLIST+CODE_COMPLETE)

http://smilejay.com/2012/10/vim-for-linux-programmer/ 在2年前,写过一篇文章“Vim:打造Linux C/C++程序员的编辑器”,先在根据...

程序员提高效率的辅助开发软件神器汇总

工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马上开始~! 零:Note...

程序员必须要看的 一个从事十年开发软件工程师对职业理解

程序员是软件开发公司企业中最基础的岗位,只要保质保量的完成分派的任务就可以了,但在我看来好多程序员就连这一点都做不到。代码写得是一塌糊途,只要能正常运行就算是万事大吉,而且总是会告诉你没有重构的时间。...

程序员必须要看的 一个从事十年开发软件工程师对职业理解

转自:51cto http://developer.51cto.com/art/201102/245279.htm程序员是软件开发公司企业中最基础的岗位,只要保质保量的完成分派的任务就可以了,但在我看...

程序员提高效率的辅助开发软件神器汇总

工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马上开始~! 零:Note...

Linux 日常使用和开发软件【记录专用贴】

本人刚使用 Linux 系统不到半年,所以有很多软件没用过,在网上看到相关的帖子,现特记录。正在整理中。。。 下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工程软件...
  • dscyw
  • dscyw
  • 2013年09月29日 16:06
  • 986

FPGA设计开发软件ISE使用技巧之:片上逻辑分析仪(ChipScope Pro)使用技巧

URL: http://www.icbuy.com/info/news_show/info_id/182769.html 6.7  片上逻辑分析仪(ChipScope Pro)使用技巧 ...

使用Redpark Serial cable SDK 开发软件连接iphone的研究

1、Introduction简介 这个SDK以及包里带的一个接口使用例子提供给:IOS程序开发者,并且需要了解Serial data communications 1.1、 Overv...
  • chiuan
  • chiuan
  • 2012年03月31日 15:21
  • 2376
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Vim开发软件-程序员的利器CScope
举报原因:
原因补充:

(最多只允许输入30个字)