用Vundle安装好gtags-cscope后,要在vimrc里添加如下设置:

" cscope
set cscopetag                  " 使用 cscope 作为 tags 命令
set cscopeprg='gtags-cscope'   " 使用 gtags-cscope 代替 cscope

下边的配置让GtagCscope生效,实际上不需要,gtags-cscope可以自己去找

" gtags
let GtagsCscope_Auto_Load = 1
let CtagsCscope_Auto_Map = 1
let GtagsCscope_Quiet = 1

有时候要是找不到的化试下以下的命令,但实际上不需要,gtags-cscope可以自己去找。

cs add GTAGS <project-directory> -a where <project-directory> is the name of the directory in which gtags was run and in which GTAGS resides. The -a flag tells gtags-cscope to output absolute file names. Also let $GTAGSDBPATH = <project-directory> and let $GTAGSROOT = <project-directory>

再介绍一下cscope(这个程序已经被放弃维护了)

Vim里可以被编译成调用cscope的接口并分析其输出结果来做一些查询动作

Cscope 是一个交互式的屏幕下使用的工具,用来帮助你:

       无须在厚厚的程序清单中翻来翻去就可以认识一个 C 程序的工作原理。

       无须熟悉整个程序就可以知道清楚程序 bug 所要修改的代码位置。

       检查提议的改动 (如添加一个枚举值) 可能会产生的效果。

       验证所有的源文件都已经作了需要的修改;例如给某一个现存的函数添加一个参
数。 在所有相关的源文件中对一个全局变量改名。 在所有相关的位置将一个常数改为一个预处理符号。 它被设计用来回答以下的问题:
什么地方用到了这个符号?
这是在什么地方定义的?
这个变量在哪里被赋值?
这个全局符号的定义在哪里?
这个函数在源文件中的哪个地方?
哪些函数调用了这个函数?
这个函数调用了哪些函数?
信息 "out of space" 从哪来?
这个源文件在整个目录结构中处于什么位置?
哪些文件包含这个头文件?

cscope选项如下

-R: 在生成索引文件时,搜索子目录树中的代码,因为我们已经在cscope.files中把所有的文件都打印入了列表中,所以
-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,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

cscope的基本用法:

1. :cs add命令:添加一个数据库,这里可以是GTAGS

2.:cs find 查询相依功能的符号

                0 或 s: 查找本 C 符号
1 或 g: 查找本定义
2 或 d: 查找本函数调用的函数
3 或 c: 查找调用本函数的函数
4 或 t: 查找本字符串
6 或 e: 查找本 egrep 模式
7 或 f: 查找本文件
8 或 i: 查找包含本文件的文件

3.:cs kill {连接号}:删除与数据库的连接

4.:cs reset:重置连接

5.:cs show显示当前连接

相关选项,可以用set来设置

cscopequickfix:设置quickfix窗口里显示的选项,+代表添加到quickfix窗口,-代表清楚上次选项,0代表不添加

比如

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

cscropeprg:指定执行cscope命令的程序

cscopetag(cst):是否用cscope代替ctags,在需要使用tag文件的时候,比如:tag命令和<C-]>命令

csto:命令的查找次序,默认为0,0为从cscope开始,1为从ctags开始

cscoperelative:没有给cscope -P选项指定路径前缀时,设置该选项导致使用cscopt.out文件所在的目录为前缀

cspc:决定显示文件路径多少部分,缺省0全显示

cscopeverbose:是否告之数据库加载结果

用如下代码生成cscope.out数据库文件

 function Do_CsTag()
if(executable("cscope") && has("cscope") )
if(has('win32'))
silent! execute "!dir /b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
else
silent! execute "!find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.m" -o -name "*.mm" -o -name "*.java" -o -name "*.py" > cscope.files"
endif
silent! execute "!cscope -b"
if filereadable("cscope.out")
execute "cs add cscope.out"
endif
endif
endf

vimrc里使用以下配置

 if has("cscope")
set cscopequickfix=s-,c-,d-,i-,t-,e-
set csto=
set cst
set csverb
endif

按键映射可以如下

 nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<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>:copen<CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>

在Vim里使用gtags-cscope的更多相关文章

  1. 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)

    1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scr ...

  2. ctagst简单应用,将Vim改造:Ctags,Taglist,Cscope,OmniCppComplete,SuperTab,Winmanager,NERDTree,MiniBufExplorer,vimrc

    vim + ctags $ ctags #给同一个目录下的所有文件建立tags 这时在tags文件所在的目录下打开源文件阅读,vim就会自动调用tags文件.如果tags文件不在当前目录下,能在命令模 ...

  3. 【转】将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

    原文网址:http://blog.csdn.net/bokee/article/details/6633193 工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.好吧,我知道这是废话.. ...

  4. 无意发现vim里插入模式可以借助Alt键输入一些特殊字符

    无意发现vim里插入模式可以借助Alt键输入一些特殊字符.如: Alt+w: ÷ Alt+:: » Alt+f  :  æ Alt+ . :  ® Alt+ ? :  ¯...

  5. Vim里常见的几个不可见字符

    Vim里常见的几个不可见字符:^@ = 0x00 Null值^I = 0x09 水平制表^J = 0x0A 换行^M = 0x0D 回车

  6. 在Vim中使用gtags

    之前一直使用vim+ctags+cscope来弄c的代码,最近看同事使用gtags,觉得在搜索方面要高级很多,网上大多都是emacs+gtags的资料,而vim的则比较少,这里搞通了之后,做个记录. ...

  7. vim里添加自动补齐插件,与python 函数补齐

    参考  http://www.jb51.net/article/58009.htm 将 # cat ~/.vimrc filetype plugin on let g:pydiction_locati ...

  8. vim里设置tab及自动换行

    今天在使用vim编辑器时发现默认的tab键是8个字符,于是就想到把它设为四个空格,经过百度,得到了以下方法: 首先进入~/.vimrc 然后在文档末尾加上以下代码: set tabstop=4    ...

  9. 如何在vim里删除空行?

    删除空行,进入底行模式 :g/^$/d ^代表首列 $代表尾列 d代表删除 g代表全局替换

随机推荐

  1. MVC3 ViewBage 输出的值 被编码

    问题描述:       后台,Actoin中我向ViewBage中加入了一个json ViewBage.JsonDateMenu ="[{\"id\":2,\" ...

  2. style、currentStyle、getComputedStyle区别介绍

    style.currentStyle.getComputedStyle区别介绍 来自:蓝色天空 样式表有三种方式 内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有 ...

  3. 【解惑】深入jar包:从jar包中读取资源文件

    [解惑]深入jar包:从jar包中读取资源文件 http://hxraid.iteye.com/blog/483115 TransferData组件的spring配置文件路径:/D:/develop/ ...

  4. Hibernate Cascade & Inverse

    Cascade - 修改实体表 Inverse - 修改中间表 http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html 1.到底在 ...

  5. 对vector等STL标准容器的排序操作

    [+] STL提供的Sort 算法 所有sort算法介绍 sort 中的比较函数 sort 的稳定性 全排序 局部排序 nth_element 指定元素排序 partition 和stable_par ...

  6. android.support.v7.app.AppCompatActivity

    1.Android Studio (api 23) 新建项目的时候 Activity public class MainActivity extends AppCompatActivity 2.系统默 ...

  7. Perl内置变量速查表

    [ 文件句柄 ] $| 如果非零, 则在对当前选定的文件执行写或打印操作后强制清除缓冲区 $% 当前选中文件句柄的当前页码 $= 当前选中文件句柄的当前页面长度 $- 当前选中文件句柄的页面剩余长度 ...

  8. 【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍

    本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data ...

  9. 彻底卸载网易UU网游加速器的方法

    昨天跟朋友一起玩游戏,网速感觉不怎么好就下了一个免费的网易UU加速器来给对战平台加速,结果加速了以后网速更差,我晕,于是想卸载,可这个加速器口只有一个exe文件,不用安装,但在第一次加速时记得安装了一 ...

  10. crontab定时任务中文乱码问题

    手动执行都很正常的的脚本,添加到定时任务中日志文件全是乱码经过多方查证终于找到了原因! crontab启动的任务没有获取系统的环境变量,导致中文乱码解决办法:   在执行的脚步中添加编码方式或者添加对 ...