zoukankan      html  css  js  c++  java
  • 在Vim里使用gtags-cscope

    用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数据库文件

     1 function Do_CsTag()
     2     if(executable("cscope") && has("cscope") )
     3         if(has('win32'))
     4             silent! execute "!dir /b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
     5         else
     6             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"
     7         endif
     8         silent! execute "!cscope -b"
     9         if filereadable("cscope.out")
    10             execute "cs add cscope.out"
    11         endif
    12     endif
    13 endf

    vimrc里使用以下配置

    1 if has("cscope")
    2     set cscopequickfix=s-,c-,d-,i-,t-,e-
    3     set csto=0
    4     set cst
    5     set csverb
    6 endif

    按键映射可以如下

    1 nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    2 nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
    3 nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    4 nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    5 nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    6 nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
    7 nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
    8 nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
  • 相关阅读:
    牛客-小V和gcd树
    CF-Codeforces Round #639 (Div. 2)-D-Monopole Magnets
    牛客-牛牛染颜色
    CF-637
    提高办公效率——快捷键
    FusionComputer虚拟机克隆后出现网卡服务重启失败解决办法
    centos7.5mini中Firewalld端口不通解决办法及想法
    FusionConputer热迁移过程记录
    Java集合框架之Iterable接口
    初识Java集合框架
  • 原文地址:https://www.cnblogs.com/cascle/p/5148389.html
Copyright © 2011-2022 走看看