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

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

Vim Cscope配置与使用相关推荐

  1. 【从入门到进阶】vim基础配置+ 常用插件(NERDTree, cscope, rainbow等)

    文章目录 前言 一.vim基础配置 二.常用插件 2.1 Vundle 2.1.1 Vundle安装 2.1.2 Vundle配置 2.1.3 安装插件 2.1.4 Vundle常用指令 2.2 NE ...

  2. vim+cscope+ctags打造属于自己的IDE

    所谓工欲善其事,必先利其器.作为专业码农,特别是长期在Unix系统上展开工作(查看源代码.coding)的码农,没有一个极致的IDE环境,工作效率会很受影响的.当然啥时候Unix系统如果有Visual ...

  3. vim + cscope + kscope

    2019独角兽企业重金招聘Python工程师标准>>> z 1. vim阅读代码     添加cscope符号索引数据库后,可以调用"cscope find"命令 ...

  4. vim cscope java_在Vim(gvim)中使用cscope

    之前已经详细的介绍了在 vim中使用ctags ,这篇文章我们就来详细介绍一下如何在vim中使用cscope. 首先,我们还是了解一下什么是cscope.简单来讲,cscope主要用来协助浏览C/C+ ...

  5. Vim的配置和高级使用

    Vim的配置和高级使用 前言 一.代码编辑器介绍 1.1 vim 1.2 Eclipse 1.3 Brackets 1.4 Emacs 1.5 LightTable 1.6 Chocolat 1.7 ...

  6. 【vim编辑器配置】Linux / Ubuntu 傻瓜式配置 vim + 功能齐全 + 方便好用

    [vim编辑器配置]Linux / Ubuntu 傻瓜式配置vim + 功能齐全 + 方便好用 本文主要讲述, Linux/Ubuntu系统如何配置vim,让其变得高端大气上档次,皮实好用功能全. W ...

  7. ubuntu下vim的配置

    写在前面,我写本文的目的不在于教大家怎么来配置VIM,因为我是新手,我也是参考了各位前辈的方法,在此只是记录一下过程,当然我个人觉得更重要的是心得体会.其实大家可能也发觉,国内的抄袭转载现象很严重,基 ...

  8. [转] vim自定义配置 和 在ubnetu中安装vim

    Ubuntu 12.04安装vim和配置 问题: ubuntu默认没有安装vim,出现: jyg@ubuntu:~$ vim test.c The program 'vim' can be found ...

  9. 用Vim编程——配置与技巧

    本文介绍如何用强大的文本编辑器 Vim编程.只要配置得当,效果堪比一个IDE. 配置 基本配置: "开启语法高亮 syntax on "依文件类型设置自动缩进 filetype i ...

最新文章

  1. java录排名怎么写_面试官:Java排名靠前的工具类你都用过哪些?
  2. 【进程】进程通信-共享内存
  3. 【转】Google Maps Android API V2的使用及问题解决
  4. jpa oracle 传参int类型判空_springboot学习-springboot使用spring-data-jpa操作MySQL数据库...
  5. python3 logging模块_python3中使用logging模块写日志,中文乱码,如何解决?
  6. Oracle 1204 RAC failover 测试 (六)
  7. 虚拟机安装菜鸟教程(2)——CentOS8系统安装 网络 时间配置
  8. 当try和finally都包含return时
  9. LeetCode 56. 合并区间(合并区间+排序)
  10. 开源库、jar包(要不要重新制造轮子)—— C/C++、Java、Python
  11. [笔记][随笔]近期小结
  12. Java8初体验(一)lambda表达式语法
  13. Tomcat安装与卸载
  14. 偷窥桌面程序和IE浏览器的密码编辑框
  15. 全年无限次免费畅读电子书,这份大礼包你想不想要?
  16. SHAPE 文件格式详解
  17. Entry name ‘META-INF/androidx.vectordrawable_vectordrawable.version‘ collided
  18. 37个项目!2020年5G+智慧灯杆项目落地情况大汇总
  19. Git 修改 commit author
  20. 苹果手机android设备可以删除吗,手机系统自带软件怎么卸载?苹果/安卓软件卸载攻略...

热门文章

  1. excel怎么设置自动计算_电气自动计算表,excel函数输入数据秒出精准结果,超好用...
  2. cocos creator 最小生成树示例
  3. android studio中使用AIDL进行客户端与服务端互相通信
  4. 基于STM32的触摸屏学习笔记
  5. PB控件:Graph图形控件
  6. 神策数据正式推出智能预警分析,你的指标预警小管家上线啦!
  7. tr闭包_个人简历网页模板
  8. 网络安全管理员_三级_操作技能考核解题过程(1)
  9. 人的横向发展与纵向发展
  10. 技术横向发展?还是纵向发展?