这两天想要在linux下编写量比较大的代码,听说vim+cscope可以实现类似sourceinsight的功能,就花了半天时间学习cscope的使用。

1. vim的准备

首先 vim --version | grpe

cscope,看看vim是否支持cscope,如果不支持需要重新安装vim。最简单的是在./configure

后加上-enable-cscope,当然可以在Makefile文件(./src/Makefile)中修改(把原来的注释去掉),这是最根本的:

CONF_OPT_CSCOPE = --enable-cscope

然后安装:make && make install

2. cscope的准备

安装cscope(我的版本15.6),由于是非root用户,需要./configure --prefix=$HOME/local/cscope指可执行定文件和man文件的地址。

3. 生成所需的文件

前两样都具备了,现在可以在vim中用cscope来看代码了。怎么看?? 如同sourceingight一样,cscope需要一些数据文件(数据库&索引)来查找代码的相关关键字信息。

这些文件需要手工生成:格式: cscope [options]下面是cscope的常用选项:

现在进入代码的根目录然后:cscope -Rbq。这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。

cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过C++及Java后缀的文件。如果你希望cscope解析C++或Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。

一般用如下命令生成包含cpp文件的cscope.files:

find ./ -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files

在cscope.files生成以后,就可以cscope -bq来得到索引(.out)文件了。

-R: 在生成索引文件时,搜索子目录树中的代码

-b: 只生成索引文件,不进入cscope的界面

-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

-k: 在生成索引文件时,不搜索/usr/include目录

-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。

-I dir: 在-I选项指出的目录中查找头文件

-u: 扫描所有文件,重新生成交叉索引文件

-C: 在搜索时忽略大小写

-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

4. 在vim中使用cscope

在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能。

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方

g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能

d: 查找本函数调用的函数

c: 查找调用本函数的函数

t: 查找指定的字符串

e: 查找egrep模式,相当于egrep功能,但查找速度快多了

f: 查找并打开文件,类似vim的find功能

i: 查找包含本文件的文

可以看到,想查找一个关键词要输入不少命令,降低了效率,其实可以通过快捷键实现快速查找。下面是从网上找到的一个.vimrc中进行cscope选项和键盘映射的脚本段:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" cscope setting

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

if has("cscope")

set csprg=/usr/bin/cscope

set csto=1

set cst

set nocsverb

" add any database in current directory

if filereadable("cscope.out")

cs add cscope.out

endif

set csverb

endif

nmap s :cs find s =expand("")nmap g :cs find g =expand("")nmap c :cs find c =expand("")nmap t :cs find t =expand("")nmap e :cs find e =expand("")nmap f :cs find f =expand("")nmap i :cs find i ^=expand("")$nmap d :cs find d =expand("")

初次使用可能会觉得恨不适应,慢慢习惯了就好。在VIM的网站上有很多与cscope相关的插件:,还有cscope的主页: 。

cscope精准查看linux函数调用,linux下使用 vim + cscope 查看代码相关推荐

  1. cscope精准查看linux函数调用,Cscope的使用(领略Vim + Cscope的强大魅力)

    1.Cscope介绍 Cscope是类似于ctags一样的工具,但可以认为她是ctags的增强版,因为她比ctags能够做更多的事.在Vim中,通过cscope的查询,跳转到指定的地方就像跳转到任何标 ...

  2. 监控io性能, free命令, ps命令, 查看网络状态, linux下抓包

    2019独角兽企业重金招聘Python工程师标准>>> 监控io性能 free命令 ps命令 查看网络状态 linux下抓包 --- 监控io性能 查看磁盘 iostat 和sar属 ...

  3. linux下使用free命令查看实际内存占用

    linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位).而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内 ...

  4. 关于linux下目录树的查看TEEE命令

    关于linux下目录树的查看<TEEE命令> 有时我们需要生成目录树结构: 这时需要用到TREE命令: 关于TREE命令的一些参数: 常见的用法: tree -a 显示所有 tree -d ...

  5. linux下网络排错与查看

    linux下网络排错与查看 2014-09-25      0个评论    来源:生死看淡,不服就干!   收藏    我要投稿 基本的故障排除错误 故障的排除一定是先简单后复杂的,有的人把上述的文件 ...

  6. Linux:centos释放缓存,查看磁盘空间大小,xxx文件夹, 查看文件夹大小,查看剩余内存,查看xxx软件位置,统计某文件夹,统计某文件夹下目录数量,查看文件夹大小,给文件夹下所有的文件赋值权限

    一台老的PHP后台服务器,今天用 free -m 查看,发现内存跑满了. 再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用0.9%,那是什么占用的呢?谷歌了一 ...

  7. linux 查看端口 程序,linux开发:Linux下查看端口占用

    前段时间有学生问到,怎么查看 linux系统中已经被占用的端口?下面就统一给大家解释一下. 提到端口,那首先来回顾端口定义,为了区分一台主机接收到的数据包应该转交给哪个任务来进行处理,使用端口号来区别 ...

  8. linux下使用free命令查看实际内存占用(可用内存)

    linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位).而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内 ...

  9. 重启apache下php,linux下apache重启并查看php环境

    本文主要和大家分享linux下apache重启并查看php环境,本文主要以代码来和大家分享,希望能帮助到大家. 首先切换到init.d目录下cd /etc/rc.d/init.d 然后ls列出目录: ...

最新文章

  1. android自定义水波纹,Android自定义View——实现水波纹效果类似剩余流量球(示例代码)...
  2. python错误代码提示手册_python学习手册笔记——33.异常编码细节
  3. LaTeX配置及实用工具汇总
  4. Echarts地图初体验
  5. java 怎么快速找到实现类_JAVA懒开发:FreeMarker快速实现类的增删改查接口
  6. matlab randn 范围,请问randn产生的数据在什么范围内变化
  7. C#中获取当前时间:System.DateTime.Now.ToString()用法
  8. 单链表头插法与尾插法的c语言实现(回顾)
  9. node环境搭建流程
  10. 北航数值分析大作业_嫦娥5号在月球取土,有清华人的贡献吗?哪些学校贡献比较大?...
  11. 数据库日志路径--数据库清理垃圾日志路径
  12. Centos7 把php5.4升级到php5.6
  13. 关于@media不生效的问题和meta总结
  14. 卧槽!我的IDEA中XML显示屎黄色,怎么去掉?
  15. linux做蓝牙接收器,简单自制蓝牙接收器
  16. c语言字符动画源码下载,C语言程序实例大全(220个精彩源码下载)
  17. 游戏开发物理引擎PhysX研究系列:通过Unity中的物理系统学习Physx指引贴
  18. JMeter(二十一):使用BeanShell解析Json格式的报文
  19. VBA和Python双语对照,Excel编程学习更简单
  20. 大白菜读取linux硬盘,大白菜的linux之旅,文件操作首探

热门文章

  1. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(二十三)-CMS识别
  2. HTML5 canvas 游戏设计:创建一个经典的魔塔游戏
  3. 倍分法DID详解(一):传统DID
  4. 供应链数字化转型,从主数据管理开始
  5. android studio中使用AIDL进行客户端与服务端互相通信
  6. ListaryPro
  7. 嵌入式培训经验分享——C++入门基础知识
  8. 常见遥感卫星参数介绍nbsp;(转)
  9. mac读取csv文件数据,采用逗号分隔
  10. 1868小编热荐9款2009年最好的音乐手机