zoukankan      html  css  js  c++  java
  • VIM 之 cscope

    转自:http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

    http://cscope.sourceforge.net/

    可以使用Cscope完成如下功能:

    查看一个函数在哪里被调用

    查看变量在哪里被使用

    查看一个函数调用了哪些函数

    检查改动,例如增加一个枚举,会产生什么影响

    检查所有的地方都进行了相应修改,例如给一个函数增加参数

    在所有文件中对一个全局变量进行改名

    源文件在目录中的位置

    哪些文件包含这个头文件

    Cscope地址:

    http://cscope.sourceforge.net

    解压后编译安装:

    # ./configure # make # make install      

    之后,在~/vimrc中增加如下一行:

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

    这个用以设定是否使用quickfix 窗口来显示cscope的结果,quickfix请参看另一篇文章。

    与Ctags类似,要使用Cscope必须先为源代码生成一个cscope数据库,。

    在项目的根目录运行下面的命令:

    # cd /home/zebra/myprogram/src # cscope -Rbq # 这样会生成三个文件 # 打开文件, 开始Coding # cd src # vi mymain.c

    进入vim后需要把生成的cscope文件导入到vim中来,用下面的命令:

    :cs add /home/zebra/myprogram/src/cscope.out  /home/zebra/myprogram/src

    必须把两级中的cscope文件都加入。因为源码是多级目录的,仅仅具有前一个,cscope无法在子目录的源码中正确工作。

    当然,如果你的源码都在同一级目录中就没关系了。

    如果经常用cscope,可以把上述加入到~/.vimrc。

    其一般使用如下:

    :cs find g mymain 查看跳转到定义处

    :cs find g mymain 查看引用情况,按下回车则调转到第一个引用处。

    如果对跳转结果不满意,使用:

    :cw  打开quickfix窗口进行挑选。

    cscope的主要功能是通过子命令"find"实现。

     cs find c|d|e|f|g|i|s|t name

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

    查找都要输入长串命令的话非常不方便,Cscope的帮助手册中推荐了一些快捷键的用法。

    下面是其中一组,也是常用的。

    将下面的内容添加到~/.vimrc中, 并重启vim即可:

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

    这样,当光标停在某个你要查找的词时, 按下<C-_>g,就会跳转到该对象的定义。其它的类似。

    按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态,可以如下解决: <C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"。

    使用reset重新初始化所有连接 ,用法:

    cs reset

  • 相关阅读:
    Windows文件操作的直接函数调用
    随笔
    XML的四种解析器原理及性能比较
    TVirtualStringTree的图标状态重叠
    使用代码控制TVirtualStringTree的选项
    c 与 c++中的time相关函数
    0x08标志类型的RTMPE、RTMPTE协议分析
    小小的高兴一下
    Scaleform GFx
    delphi类的相互引用
  • 原文地址:https://www.cnblogs.com/hojor/p/3270607.html
Copyright © 2011-2022 走看看