vim+cscope简易教程

百般思念 提交于 2020-02-21 07:06:36

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

Cscope的主页在http://cscope.sourceforge.net/,如果你的计算机上没有cscope,你可以在此处下载它,在写本文时,它的最新版本是15.8b。mac中可以用homebrew一键安装。

1、cscope的用法很简单,首先需要为你的代码生成一个cscope数据库。在你的项目根目录运行:

cscope -Rbqk

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

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

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

5、-R表示索引子目录。R是递归的首字符简写。

在vim中使用cscope:

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

2、在vim中使用cscope非常简单,首先调用"cscope add"命令添加一个cscope数据库,然后就可以调用"cscope find"命令进行查找了。

3、vim支持8种cscope的查询功能,如下:

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

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

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

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

  • cscopeprg选项用于设置cscope程序的位置。
  • cscopequickfix设定是否使用quickfix窗口来显示cscope的结果,详情请":help cscopequickfix";
  • 如果你想vim同时搜索tag文件以及cscope数据库,设置cscopetag选项;
  • cscopetagorder选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库,设置为1先查找tag文件。我通常设置为1,因为在tag文件中查找到的结果,会把最佳匹配列在第一位。

7、vim的手册中给出了使用cscope的建议方法,使用命令":help cscope-suggestions"查看。

8、Using Cscope on large projects (example: the Linux kernel):http://cscope.sourceforge.net/large_projects.html

9、the vim+cscope tutorial:http://cscope.sourceforge.net/cscope_vim_tutorial.html

10、cscope提供一组命令,可以在vim里面更换链接,就是可以更换不同的cscope.out文件。

:cs show   //显示当前连接
:cs reset   //重新初始化连接
:cs kill  {number|partial_name}   //终止某个连接

11、显示一个简短的cscope语法概要。

:cs help

参考:https://blog.easwy.com/archives/advanced-vim-skills-cscope/

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!