vim-cscope配合使用介绍

1、Cscope介绍

cscope是类似于ctags一样的工具,可以认为她是ctags的增强版。在Vim中,通过cscope的查询,跳转到指定的地方就像跳转到任何标签;她能够保存标签栈,所以通过合适的键盘映射绑定,你能够在函数中向后或向前跳转,就像通常使用的tags一样。

首次使用Cscope时,他会根据源文件生成符号数据库。然后在以后的使用中,cscope只是在源文件有改动或源文件列表不同时才会重建数据库。当在重建数据库时,未改动过的文件对应的数据库信息会从旧的数据库中拷贝过来,所以会使重建数据库快于起初新建数据库。

Vim中的cscope接口是通过以命令行形式调用完成的,然后解析查询返回结果。最终的结果就是cscope查询结果。

2、Cscope相关命令

所有的cscope命令都是通过向主cscope命令”:cscope”传递参数选项。她最短的缩写是”:cs”。

add :增加一个新的cscope数据库/链接库

使用方法::cs add {file|dir} [pre-path] [flags]
其中:[pre-path] 就是以-p选项传递给cscope的文件路径,是以相对路径表示的文件前加上的path,这样你不要切换到你数据库文件所在的目录也可以使用它了。
[flags] 你想传递给cscope的额外旗标
实例:
:cscope add /root/code/vimtest/ftpd
:cscope add /project/vim/cscope.out /usr/local/vim
:cscope add cscope.out /usr/local/vim –C

find :查询cscope

使用方法::cs find {querytype} {name}

其中:{querytype} 即相对应于实际的cscope行接口数字,同时也相对应于nvi命令:
0或者s   —— 查找这个C符号
1或者g  —— 查找这个定义
2或者d  —— 查找被这个函数调用的函数(们)
3或者c  —— 查找调用这个函数的函数(们)
4或者t   —— 查找这个字符串
6或者e  —— 查找这个egrep匹配模式
7或者f   —— 查找这个文件
8或者i   —— 查找#include这个文件的文件(们)
 
实例:(#号后为注释)
cscope find c ftpd_send_resp                      # 查找所有调用这个函数的函数(们)
:cscope find 3 ftpd_send_resp                     # 和上面结果一样
:cscope find 0 FTPD_CHECK_LOGIN       # 查找FTPD_CHECK_LOGIN这个符号

reset:重新初始化所有的cscope链接。

show:显示cscope的链接

3、Cscope选项

使用:set命令来设置cscope的所有选项。 ‘cscopeprg’指定了执行cscpoe的命令。默认是”cscope”。 例如:
1
  :set csprg=/usr/local/bin/cscope

‘cscopequickfix’指定了是否使用quickfix窗口来显示cscope的结果。

‘+’预示着显示结果必须追加到quickfix窗口。

‘-’隐含着清空先前的的显示结果,’0’或者不设置表示不使用quickfix窗口。下面的值似乎会很有用:”s-,c-,d-,i-,t-,e-”。

通过设置’cst’,你将始终同时查找cscope数据库和tags文件。默认情况是关闭的,例如:
1
2
 :set cst
 :set nocst

 ‘csto’的值决定了|:cstag|执行查找的顺序。假如’csto’被设置为0,那么cscope数据将会被优先查找,

1
2
:set csto=0
:set csto=1

’cscopeverbose’没有被设置(默认情况),那么当在增加一个cscope数据库时不会显示表示表示执行成功或失败的信息。

1
2
:set csverb
:set nocsverb

‘cspc’的值决定了一个文件的路径的多少部分被显示。默认值是0,所以整个路径都会被显示。值为1的话,那么就只会显示文件名,不带路径。

1
:set cspc=3
将会显示文件路径的最后3个部分,包含这个文件名本身。

4、在Vim中怎么使用cscope

sud apt-get install escople自动安装

A. 建立cscope使用的索引文件
        1. 在你需要浏览源码的根目录下(如你想用cscope看linux源码)使用下面命令:
             #: cscope -Rbkq<回车>
        2. R 表示把所有子目录里的文件也建立索引
        3. b 表示cscope不启动自带的用户界面,而仅仅建立符号数据库
        4. q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
        5. k在生成索引文件时,不搜索/usr/include目录

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

B.把生成的cscope文件导入到vimrc中来

    set cscopequickfix=s-,c-,d-,i-,t-,e-

    cs add /usr/code/libpcap/cscope.out  /usr/code/libpcap/

    cscope的帮助手册中推荐了一些快捷键的用法, 下面是其中一组, 也是我用的, 将下面的内容添加到~/.vimrc中, 并重启vim:

    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>

    当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.
    按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
    <C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"

    也可以将下面的设定加入到你的 .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

C. 在源码根目录下打开任意.c文件,使用如下命令:
 
       1. Ctrl+]将跳到光标所在变量或函数的定义处 Ctrl+T返回
 
       2. :cs find s ---- 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
 
          :cs find g ---- 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
 
          :cs find d ---- 查找本函数调用的函数
 
          :cs find c ---- 查找调用本函数的函数
 
          :cs find t: ---- 查找指定的字符串
 
          :cs find e ---- 查找egrep模式,相当于egrep功能,但查找速度快多了
 
          :cs find f  ---- 查找并打开文件,类似vim的find功能
 
          :cs find i  ---- 查找包含本文件的文
 
       3. 以上所有命令也可以且按銉来实现:
 
             1. Ctrl+\\ 再按 s 表示:cs find s命令
 
             2. 同理实现cs find + g,d,c,t,e,f,i命令 


你可能感兴趣的:(vim-cscope配合使用介绍)