Vim Cscope配置与使用

1、Cscope介绍

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

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

       当你在命令行下调用cscope时,你会获得一个全屏选择窗口,能够使你查询特定的内容。然而,一旦你查询的有匹配,那么就会用你默认的编辑器来编辑该源文件,但是你不能够简单的使用Ctrl+]或者:tag命令来从一个标签跳转到另一个标签。

       Vim中的cscope接口是通过以命令行形式调用完成的,然后解析查询返回的结果。最终的结果就是cscope查询结果就像通常的tags一样,这样你就可以自由跳转,就像在使用通常的tags(用ctrl+]或者:tag跳转)

2、Cscope安装

  apt-get install cscope

或者在网站下载



3、Cscope配置

  修改vim配置文件vimrc.你可以修改/etc/vimrc使用所有用户都使用本配置文件,当然你还可以修改~/.vimrc

将如下内容放置到你的.vimrc中:

       if has("cscope")

              set csprg=/usr/local/bin/cscope

              set csto=0

              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

 

       通过设置’cscopetag’,我们已经有效的将所有:tag的情况都替换为:cstag。这包括:tag、ctrl+],和”vim -t”。然后,正常的tag命令就会不光在tag文件中查找,也会在cscope数据库中查找。

注:

遇到错误

cs_read_prompt EOF: 没有那个文件或目录
E609: Cscope 错误: sh: 1: exec: /usr/local/bin/cscope: not found

则将第二行注释即可,即    " set csprg=/usr/local/bin/cscope


一些经常用cscope查找(使用”:cs find”)是查找调用某一特定函数的所有函数,和查找所有出现特定C符号的地方。为了做这些事,你可以使用如下的键盘映射作为例子:

              map g<C-]> :cs find 3 <C-R>=expand(“<cword>”)<CR><CR>

              map g<C-/> :cs find 0 <C-R>=expand(“<cword>”)<CR><CR>

 

       这些给ctrl+](右中括号)和ctrl+/(反斜杠)的映射可以允许你将光标放置到函数名称或者C符号上然后执行快速cscope查找匹配。

       你可以使用如下方案(很好用,可以将其添加到.vimrc中):

    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>


3、Cscope索引

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

然后在~/vimrc中增加一句:



:setcscopequickfix=s-,c-,d-,i-,t-,e-
这个是设定是否使用 quickfix 窗口来显示 cscope 结果, 用法在后面会说到。

跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 在项目的根目录运行下面的命令
:csadd /home/wooin/vim71/cscope.out  /home/wooin/vim71


源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了.如果你要经常用cscope的话, 可以把上面那句加到~/.vimrc中去.


更多cscope命令可打开一个vim文件中查看

   help :显示一个简短的摘要。

              使用方法:

              :cs help


后续补充说不定会更新。。。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值