用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. Windows Phone使用sliverlight toolkit实现页面切换动画效果

    使用应用时,好多app在页面切换的时候都有一个动画效果,感觉很炫,也大大增加了用户体验,怎么实现呢? 界面的切换,可以用Windows Phone Toolkit中的TransitionService ...

  2. Geographic Coordinate Systems

    Coordinate Systems Geographic Coordinate Systems This is an archive of a previous version of the Arc ...

  3. jquery 点击查看,收起特效

    <div class="all"> <p><a href="javascript:;" id="onvk"&g ...

  4. JavaScript的语法要点 4 - 面向对象的基础

    在传统的面向对象语言如C++.C#.Java中有类.对象.继承等概念.在JavaScript中又如何表示呢?JavaScript中没有class关键字,JavaScript中的类.对象.继承的概念是通 ...

  5. Demo学习: Closable Tabs

    Closable Tabs 给tab页添加关闭按钮,设置UniTabSheet.Closable = True这样在tab页的右上角就会出现关闭图标,点击可以关闭当前tab页面: 1. 直接关闭,完成 ...

  6. iphone开发第一个UI应用程序QQ

    #import <UIKit/UIKit.h> @interface HViewController : UIViewController @property (retain, nonat ...

  7. Security log is full,only administrator can log on to fix the problem(安全日志满了)

    When you login the system and see this error  “Security log on this system is full,only administrato ...

  8. sirius的学习笔记(2)

    原文来自网络,侵权删 if both values of in a or expression are true ,Python will select the first one, and the ...

  9. fragment第二次载入就报错

    1.布局中加入一个<fragment 标签,第一次载入的时候是正常的,第二次加载的时候,就直接crashed,退出 2.查到原因Caused by: java.lang.IllegalArgum ...

  10. 安装Nuget上常用的包的命令

    起因: Nuget图形化操作界面各种卡顿,或者有时干脆就连不上了.所以用命令还是很必须的. 常用命令: 安装 Entity Framework : PM> Install-Package Ent ...