vim下使用cscope阅读代码

来源:互联网 发布:淘宝怎么搜爱弹幕账号 编辑:程序博客网 时间:2024/06/09 17:15


    添加cscope符号索引数据库后,可以调用"cscope find"命令进行查找,vim支持8种cscope的查询功能。如在代码中查找调用work()函数的函数,可以在vim命令状态下输入":cs find c work",回车即可。还可以进行字符串查找,它会对双引号或单引号括起来的内容查找。还可以输入一个正则表达式,这类似于egrep程序的功能。
    :cs help (vim command下查询)
 
    s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
    g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
    d: 查找本函数调用的函数
    c: 查找调用本函数的函数
    t: 查找指定的字符串
    e: 查找egrep模式,相当于egrep功能,但查找速度快多了
    f: 查找并打开文件,类似vim的find功能
    i: 查找包含本文件的文件
 
 
 
注:1.使用vi阅读代码的目录位置一定要与生成索引文件时的目录位置相同。
即可以 vi ./***/***.c实现上面的要求;或者vi ***.c但要求(3)中的find或者cscope的生成索引的位置与当前位置相同。

Ctrl+]将跳到光标所在变量或函数的定义处 Ctrl+T返回
 :cs find s ---- 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
 :cs find g ---- 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
 :cs find d ---- 查找本函数调用的函数
 :cs find c ---- 查找调用本函数的函数
 :cs find t: ---- 查找指定的字符串
 :cs find e ---- 查找egrep模式,相当于egrep功能,但查找速度快多了
 :cs find f ---- 查找并打开文件,类似vim的find功能
 :cs find i ---- 查找包含本文件的文
 

 

Vim中自动加载cscope.out

首先来分享一个小脚本,可以帮助我们在项目中生成cscope.out 和ctags。
我把这个文件命名为cs.sh

#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.java"\

  >cscope.files

cscope -bkq -i cscope.files

#cscope-indexer -r

ctags -R

需要的注意的是,上面的脚本中,生成的cscope.files中保存的是相对路径,而不是绝对路径。这样的话,在cscope 中查找tags的时候,是没法打开相应的包含查找结果的文件的。怎么避免这个问题呢?有如下两个方法:
 
1, 在cs.sh的脚本中,find命令后接一个变量PRO_PATH,这个PRO_PATH是当前项目的跟目录,这个时候cscope.files中保存的就是所有项目文件的绝对路径了。
 
2,在:cs add的时候,接一个prepend path
:cs add [cscope.out] [pre-path]

:cs add /opt/kernel/cscope.out

也可以将以下脚本写入vimrc文件实现自动搜索和添加
if has("cscope")

    set csprg=/usr/bin/cscope

    set csto=0

    set cst

    set csverb

    set cspc=3

    "add any database in current dir

    if filereadable("cscope.out")

        cs add cscope.out

    "else search cscope.out elsewhere

    else

       let cscope_file=findfile("cscope.out", ".;")

       let cscope_pre=matchstr(cscope_file, ".*/")

       if !empty(cscope_file) && filereadable(cscope_file)

           exe "cs add" cscope_file cscope_pre

    endif
endif
endif

 

0 0
原创粉丝点击