在vim中使用cscope

摘自:http://blog.csdn.net/citongke1/article/details/8497244

相关参考链接:http://easwy.com/blog/archives/advanced-vim-skills-cscope/

1.首先确认vim打开了escope接口,可通过:version命令查看是否有+escope

   然后$sud apt-get install escople自动安装

2.为源代码生成一个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 . -type f > cscope.files
这条命令把~src/vim70目录下的所有普通文件都加入了cscope.files,这样,cscope会解析该目录下的每一个文件。

在vim中使用cscope非常简单,首先调用以下命令添加一个cscope数据库,

:cs add ./cscope.out

如下图所示查找某一函数

:cs find s addArray

如果匹配结果只有一个,你会被自动带到该处。如果匹配结果多于一个,Vim 会显示一个
选择屏幕让你来选择一处匹配。在你跳转到新的位置后,简单地用 Ctrl-T 就可以跳回原
处。


在vim中使用cscope_第1张图片

然后输入#下面的号码

1

或者

2

即可定位

注意使用find 命令 须得添加下面任一选项

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

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

所有 cscope 有关的选项都可以用 |:set| 命令来设定。比较理想的做法是将这些设定添
加到你的启动文件中 (如:.vimrc)。某些 cscope 选项仅仅在 |.vimrc| 文件内才有
效。在 vim 启动之后再设定它们的值没有任何效果!
         
'cscopeprg' 指定用来执行 cscope 的命令。缺省值是 "cscope"。例如:
    :set csprg=/usr/local/bin/cscope
把上面命令添加到~/.vimrc文件中(注意set前没有冒号)

或者

建议的使用方法              
将下面的设定加入到你的 .vimrc 里 (根据你的情况调整文件路径): >

    if has("cscope")
        set csprg=/usr/local/bin/cscope
        set csto=1
        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
    endif


ps:发现cscope有可能路径不对,使用whereis命令修正
我们设定了 'cscopetag',这样所有的 :tag 命令就会实际上调用 :cstag。这包括
:tag、Ctrl-] 及 "vim -t"。结果是一般的 tag 命令不仅搜索由 ctags 产生的标签文
件,同时也搜索 cscope 数据库。

这样不用刚开始就不用输入
:cs add ./cscope.out

如果只想在当前页找某一函数,建议用:/和者:?匹配即可

为了更方便在~/.bashrc中添加快捷键

alias csrbq="cscope -Rbq"
alias csfind="find . -type f > cscope.files"


你可能感兴趣的:(在vim中使用cscope)