vim利器—>cscope

最近在大神的指引下,我从网上学会了一个很好用的工具cscope,在这里我们来说说vim的使用利器——》cscope插件,这个插件可以在我们使用vim看项目或者编译的时候便利很多,如我们在看项目的时候想看看某个函数在哪里定义的或者在哪里被调用过以及某函数都调用了那些函数等,这些功能cscope都可以实现。下面我们来看看怎么去安装cscope和使用cscope吧:
1、安装cscope:
1)如果系统是ubuntu:
sudo apt-get install cscope(配置好网络源)
2)redhat:
去Cscope的主页在http://cscope.sourceforge.net/下载cscope安装包。解压后进行安装:
安装命令:

            #:./configuer
            #:make
            #:make install

安装好cscope后就可以开始使用了。
2、使用:
在使用cscope之前我们需要为它准备好它需要使用的库,在我们需要使用cscope的目录使用命令:cscope -Rbq生成cscope需要使用的库,执行完该命令后在当前目录下会生成cscope.out cscope.in.out cscope.po.out三个文件,其中cscope.out是基本的符号索引,后两个文件是使用”-q”选项生成的,可以加快cscope的索引速度。

在缺省情况下,cscope在生成数据库后就会进入它自己的查询界面,我们一般不用这个界面,所以使用了”-b”选项。如果你已经进入了这个界面,按CTRL-D退出。

Cscope在生成数据库中,在你的项目目录中未找到的头文件,会自动到/usr/include目录中查找。如果你想阻止它这样做,使用”-k”选项。

Cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y)。如果你想使用cscope解析C++或Java后缀的文件,那么你需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。首先进入到你程序所在目录,执行下面命令:

   find . –type f > cscope.files
   cscope -bq 

vim利器—>cscope_第1张图片
我们再来看看这个新生成的文件内容,
vim利器—>cscope_第2张图片
文件里将当前目录下的所有文件名以相对路劲的形式加如在该文件中了,这样cscope工具在检索的时候会通过该文件去检测文件中包含的所有文件了。上面的cscope命令并没有使用”-R”参数递归查找子目录,因为在cscope.files中已经包含了子目录中的文件。

注意:find命令输出的文件以相对路径表示,所以cscope.out的索引也相对于当前路径。如果你要在其它路径中使用当前的cscope.out,需要使用下面介绍的-P选项。
Cscope只在第一次解析时扫描全部文件,以后再调用cscope,它只扫描那些改动过的文件,这大大提高了cscope生成索引的速度。

下表中列出了cscope的常用选项:

-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”-“,表示由标准输入获得文件列表。
-Idir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
要在vim中使用cscope的功能,需要在编译vim时选择”+cscope”。vim的cscope接口先会调用cscope的命令行接口,然后分析其输出结果找到匹配处显示给用户。

在vim中使用cscope非常简单,首先调用”cscope add”命令添加一个cscope数据库,然后就可以调用”cscope find”命令进行查找了。vim支持8种cscope的查询功能,如下:

0或者s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
1或者g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
2或者d: 查找本函数调用的函数
* 3或者c:* 查找调用本函数的函数
4或者t: 查找指定的字符串
6或者e: 查找egrep模式,相当于egrep功能,但查找速度快多了
7或者f: 查找并打开文件,类似vim的find功能
8或者i : 查找#include这个文件的文件(们)
例如:(#为注释)

                 :cscope find c ftpd_send_resp                     # 查找所有调用这个函数的函数(们)

                 :cscope find 3 ftpd_send_resp                     # 和上面结果一样



                 :cscope find 0 FTPD_CHECK_LOGIN       # 查找FTPD_CHECK_LOGIN这个符号

我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能,但它是在交叉索引数据库中查找,速度要快得多。
help :显示一个简短的摘要。

          使用方法:

          :cs help



   kill  :杀掉一个cscope链接(或者杀掉所有的cscope链接)

          使用方法:

          :cs kill {num|partial_name}

          为了杀掉一个cscope链接,那么链接数字或者一个部分名称必须被指定。部分名

称可以简单的是cscope数据库文件路径的一部分。要特别小心使用部分路径杀死一个cscope链接。

          假如指定的链接数字为-1,那么所有的cscope链接都会被杀掉。



   reset:重新初始化所有的cscope链接。

          使用方法:

          :cs reset



   show:显示cscope的链接

          使用方法:

          :cs show



   假如你在使用cscope的同时也使用ctags,|:cstag|可以允许你在跳转之前指定从一个或另一个中查找。例如,你可以选择首先从cscope数据库中查找,然后再查找你的tags文件(由ctags生成)。上述执行的顺序取决于|csto|的值。

   |:cstag|当从cscope数据库中查找标识符时等同于“:cs find g”。

   |:cstag|当从你的tags文件中查找标识符时等同于“|:tjump|”。

vim提供了一些选项可以调整它的cscope功能:

cscopecscopeprg选项用于设置cscope程序的位置。
cscopecscopequickfix设定是否使用quickfix窗口来显示cscope的结果,详情请”:help cscopequickfix”;
如果你想vim同时搜索tag文件以及cscope数据库,设置cscopecscopetag选项;
cscopecscopetagorder选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库,设置为1先查找tag文件。我通常设置为1,因为在tag文件中查找到的结果,会把最佳匹配列在第一位。
vim的手册中给出了使用cscope的建议方法,使用命令”:help cscope-suggestions”查看。

以下是cscope配置文件内容,将这些家入到vimrc中,配合vim使用,摘自网上:

if has(“cscope”)

          set csprg=/usr/local/bin/cscope

          set csto=0

          set cst

          set nocsverb

          " add any database in current directory

          if filereadable("cscope.out")

              cs add cscope.out

          " else add database pointed to by environment

          elseif $CSCOPE_DB != ""

              cs add $CSCOPE_DB

          endif

          set csverb

   endif
   nmap s :cs find s =expand("")

nmap

你可能感兴趣的:(vim利器—>cscope)