2019独角兽企业重金招聘Python工程师标准>>>

配置vim支持源码浏览(vim+ctags+cscope)

介绍

windows下流行的源码阅读软件是source insight,而linux则没有与其可匹敌图形化的源码阅读软件,现在日趋流行的eclipse开发软件,虽然可以较好的支持源码中符号之间相互跳转,但总体感觉不是十分强大和好用,可能因为eclipse是通过cdt插件的形式来支持c/c++项目,很多方面表现还有待提高。而且eclipse在终端下无法使用,而今天的主角vim+ctags+cscope可谓是无所不能,真真的强大之极。下面是关于这个组合配置和使用的简单介绍,更多的功能可以日后慢慢摸索。

组合介绍

vim是linux超强的文本编辑器。

ctags对源代码文件扫描生成交叉引用符号表,支持大多数主流语言,但相对功能简单,配合vim可以实现从变量和函数的调用点到定义点的跳转。

cscope可以理解为ctags的加强版,但支持语言的种类要少一些,完全支持c语言。它生成的源码符号引用表更加复杂,配合vim可以实现符号各引用点之间任意切换(比如从函数调用点到定义点,从定义点到调用点等)。

关于更多的vim,ctgas和cscope的知识可以去它们的官网,也可以查看man手册了解一些基本的使用信息和帮助。

准备

fedora系统的软件仓库已包括了上述几个软件包,如果没有安装可以通过下面命令直接在线安装

#yum install vim-enhanced ctags cscope

vim-enhanced是vim的一个完全功能版,最好安装此版本。

配置

vim

为了使vim更好支持浏览和编写程序代码,可以启用一些默认没有启用vim的扩展功能,如显示行号,代码自动缩进等。

#vim /etc/vimrc

#增加此行默认将开启vim行号显示功能

set number

cscope

cscope需要一个配置文件才能和vim一起工作,在下面这个地址可以找到一份cscope官方的目标配置文件,下载或者拷贝该文件至/usr/share/vim/vimxx/plugin/目录。

cscope配置文件:http://cscope.sourceforge.net/cscope_maps.vim

到此一个基于vim的源码阅读环境已经配置完成。

使用

现在你可以进入一个源码目录做一个测试,

进入源码项目根目录运行下面命令建符号立交叉引用文件:

#ctags -R . && cscope -Rqb

命令成功执行后将在当前目录下生成四个文件,分别为cscope.in.out、cscope.out、cscope.po.out和tags,他们是ctags和cscope生成的索引文件。

如何使用这个功能,其实这个得看你有什么需求了,下面举例两个应用例子:

1 把编辑器定位到项目源码中main函数开始的位置上,操作如下:

#vim -t main

2 当前vim编辑器中,光标指在read函数上,这是该函数的一个调用,我相要查看它的定义:

操作:把光标定位到read上后,可以直接通过快键Ctrl+]实现跳转。

注:如上事例操作的前提是操作目录须和上面提到的4个索引文件所在的目录为同一目录。

推荐:把生成索引文件的命令写入一个脚本文件并放到/bin/目录,这样以后就可以通过运行该脚本便捷快速的生成项目源码文件的索引文件。

出错解决

再存在索引文件的目录运行vim时,程序提示添加了cscope数据库cscope.out,按回车可以确认。如果再此步中出现载入重复的数据库错误,那是因为vimrc文件和cscope.vim配置文件中出现两次重复的载入操作,可以通过修改vimrc(或者cscope.vim)文件修正,如下:

#vim /etc/vimrc

...

38 " add any database in current directory

39 if filereadable("cscope.out")

40 "cs add cscope.out

41 " else add database pointed to by environment

42 elseif $CSCOPE_DB != ""

43 " cs add $CSCOPE_DB

44 endif

可以像如下一样使用双引号注释掉40行和43行,甚至可以直接删除38到43行的代码,此段代码在cscope.vim文件中有一份完整的拷贝。

Cscope快键解析

在vim中cscope的功能可以通过一些快键操作实现,这些快键定义在cscope.vim配置文件中

查看该文件内容:

#vim /usr/share/vim/vimxx/plugin/cscope.vim

....

99 nmap <F5>s :cs find s <C-R>=expand("<cword>")<CR><CR>

100 nmap <F5>g :cs find g <C-R>=expand("<cword>")<CR><CR>

101 nmap <F5>c :cs find c <C-R>=expand("<cword>")<CR><CR>

102 nmap <F5>t :cs find t <C-R>=expand("<cword>")<CR><CR>

103 nmap <F5>e :cs find e <C-R>=expand("<cword>")<CR><CR>

104 nmap <F5>f :cs find f <C-R>=expand("<cfile>")<CR><CR>

105 nmap <F5>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>

106 nmap <F5>d :cs find d <C-R>=expand("<cword>")<CR><CR>

....

快捷配置行解析,nmap表示定义vim非编辑模式下快键关键字,<F5>s表示快键组合F5加s键,cs find c 表示前定义快键等效的命令组合,再后面的内容是实现快键发生时传递vim中当前光标所在的字符内容。cscope配置中默认的快键主键是Ctrl+/,但这组快键组合在我的机器却无法工作,所以我把默认组合键主键都换成了F5,如果你的情况类似,也可以仿照次方式另设一个主键。再运行的vim中如果想查看设置的快键是否生效,可以通过命令查询,如输入:nmap回车可以查看当前vim中已设置的所有非编辑模式下的快键。

下面是一条查找函数所有调用点的操作事例(已上面配置文件为例):

如果你想查询read函数的所有调用点,移动光标到read单词上,按F5+s快键组合后,将会在vim编辑界面的下部列出所有read符号引用条目。

后记

如上介绍仅是一个入门级的vim+ctags+cscope配置使用文档,关于vim强大的插件支持可以打造成一个超级IDE的后续报道,希望下一步可以补充,这个目前还没有研究。

转载于:https://my.oschina.net/u/2528742/blog/681053

配置vim支持源码浏览(vim+ctags+cscope)相关推荐

  1. nginx详细文档 – 安装配置,深入源码,模块编写,编译器参数,系统函数

    nginx文档 吴东 April 28, 2009 Contents 1前言 5 2基本配置 7 2.1安装------- 7 2.2配置说明------. 10 2.3启动和控制------ 25 ...

  2. centos7.4下安装配置PHP服务(源码安装)并配置nginx支持php

    一.检查php是否已经安装,使用php -v,是否能够看到版本号,或者使用rpm -qa | grep php查看是否安装过. # yum remove php* -y 二.依赖包安装 Linux软件 ...

  3. centos7.4配置nginx php,centos7.4下安装配置PHP服务(源码安装)并配置nginx支持php

    一.检查php是否已经安装,使用php -v,是否能够看到版本号,或者使用rpm -qa | grep php查看是否安装过. # yum remove php* -y 二.依赖包安装 Linux软件 ...

  4. linux下源码安装vim,ubuntu 源码编译安装最新的vim 8.0

    为什么要源码编译安装VIM? 因为我要安装ycm,但是ubuntu14.04仓库vim版本低 教程步骤: 1, 核对系统版本 2, 删除系统自带的vim 3, 编译安装vim 4, 检验vim的安装 ...

  5. git clone的源码在vim打开时是乱码

    2019独角兽企业重金招聘Python工程师标准>>> 起因:昨天从github clone源码时,有些readme.txt的文件在vim打开时变成了乱码.在网上找了一下答案,都说是 ...

  6. vim安装-源码安装

    vim源码安装demo 1. rm old vim(centos demo) yum -y remove vim 2. download vim wget -O vim8.2.0139.zip htt ...

  7. Linux 系统安装配置PHP服务(源码安装)

    简介: PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于 ...

  8. Windows下PCL1.9.1配置(编译源码)

    PCL1.9.1并没有支持vs2015版本的exe版本,然后需要下载PCL的源码重新自己CMake编译出vs2015版本的 编译的目的: 1.得到支持vs2015的版本的PCL1.9.1 前期准备 1 ...

  9. 【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )

    文章目录 一.Flutter 插件配置 二.Flutter 插件源码示例 三.iOS 应用配置 四.Android 应用配置 五.相关资源 一.Flutter 插件配置 Flutter 拍照示例中 , ...

最新文章

  1. 大学mysql教程_MYSQL教程:新手该看的MYSQL操作
  2. “老师,请您多关注一下我吧!!!”
  3. Oracle内部错误:ORA-07445[kcflfi()+466] [INT_DIVIDE_BY_ZERO]一例
  4. clickhouse建库_专访ClickHouse创始人:数据库竞争依旧火热,技术整合势在必行
  5. SpringMVC简单小案例
  6. We7提供电子政务信息公开最佳方案
  7. 服务器系统的功能,服务器操作系统有什么功能
  8. python程序设计试题库_最新《Python程序设计》试题库资料
  9. Linux多线程工作笔记0002---C语言函数前面的*是什么意思
  10. 四种有能力取代Cookies的客户端Web存储方案
  11. java书籍_腾讯大牛每天都要花一小时读的这11本java电子书籍,你还不看?
  12. 16.看板方法---三类改进机会
  13. 介绍KMP算法思想(例题:ACWING 831 kmp字符串)
  14. hdu3081 Marriage Match II
  15. 三菱modbusRTU通讯实例_施耐德PLC常见的两种编程通讯控制实例
  16. 团队作业9——项目验收与总结
  17. 石家庄地铁路线安排网站的最终版本——博客登记
  18. idea remote debug
  19. Google Chrome谷歌浏览器去掉右上角更新提示图标
  20. Compilation failure: Compilation failure

热门文章

  1. 31.CSS3变形效果【下】
  2. Python之路【第十篇】:索引与切片的不同
  3. linux CentOS7 磁盘分区fdisk 、df 、du、parted 命令实例
  4. C# 中的 lock的陷阱
  5. [一文一命令]find命令详解
  6. 如何使用robots.txt[摘自网络]
  7. Silverlight初级教程-库
  8. superset可视化-Force-directed graph(力导引图)
  9. ubuntu下面markdown转化为word文档
  10. Emachines Em350拆机更换键盘详细流程