zoukankan      html  css  js  c++  java
  • Vim 中使用cscope

    使用cscope碰到的问题

    1. E568: duplicate cscope database not added

    根据提示,cscope数据库重复添加了,我使用的是vim7.2版本,而这个版本在已经支持cscope,并在它的配置文件中开启了cscope功能

    $ vi /etc/vimrc 

    32 if has("cscope") && filereadable("/usr/bin/cscope")
    33    set csprg=/usr/bin/cscope
    34    set csto=0
    35    set cst
    36    set nocsverb
    37    " add any database in current directory
    38    if filereadable("cscope.out")
    39       cs add cscope.out
    40    " else add database pointed to by environment
    41    elseif $CSCOPE_DB != ""
    42       cs add $CSCOPE_DB
    43    endif
    44    set csverb
    45 endif

    然后,我们给vim添加了一个插件,cscope_maps.vim, 这个文件主要作用是作一些快捷键映射,免去了输入命令的麻烦,但文件一直没有更新,里面只提及vim7以下的配置方法,在里面有如上所示相同的代码,所以导致了重复添加数据库的冲突

    $ vi ~/.vim/plugin/cscope_maps.vim 

    1
    2
    3
    4
    5
    6
    7
    40     " add any cscope database in current directory
    41     if filereadable("cscope.out")
    42         cs add cscope.out 
    43     " else add the database pointed to by environment variable
    44     elseif $CSCOPE_DB != ""
    45         cs add $CSCOPE_DB
    46     endif

    解决冲突的方法很简单,注释掉这些行便可以了

    #!/bin/sh
    find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
    find ./ -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cpp" > cscope.files cscope -bkq -i cscope.files ctags -R


    这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
    其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。
    这个脚本,首先使用find命令,查找当前目录及子目录中所有后缀名为".h", ".c"和".c"的文件,并把查找结果重定向到文件cscope.files中。然后cscope根据cscope.files中的所有文件,生成符号索引文件。最后一条命令使用ctags命令,生成一个tags文件,在vim中执行":help tags"命令查询它的用法。它可以和cscope一起使用。上面所用到的命令参数,含义如下:
    -R: 在生成索引文件时,搜索子目录树中的代码
    -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,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

    2. 在源码根目录下打开任意.c文件,使用如下命令:
    1. Ctrl+]将跳到光标所在变量或函数的定义处 Ctrl+T返回
    2. :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 ---- 查找包含本文件的文
    3. 2的所以命令也可以且按銉来实现:
    1. Ctrl+\ 再按 s 表示:cs find s命令
    2. 同理实现cs find + g,d,c,t,e,f,i命令

  • 相关阅读:
    73. Set Matrix Zeroes
    289. Game of Live
    212. Word Search II
    79. Word Search
    142. Linked List Cycle II
    141. Linked List Cycle
    287. Find the Duplicate Number
    260. Single Number III
    137. Single Number II
    Oracle EBS中有关Form的触发器的执行顺序
  • 原文地址:https://www.cnblogs.com/diegodu/p/4703074.html
Copyright © 2011-2022 走看看