• 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命令

  • 相关阅读:
    代码坏味道
    外包对程序员发展有什么弊端?
    前端接口神器
    使用Autofac
    在 WASI 上运行 .NET 7 应用程序
    在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET
    一个简单的模拟实例说明Task及其调度问题
    xxljob 小结
    [LeetCode] 1291. Sequential Digits 顺次数
    [LeetCode] 1289. Minimum Falling Path Sum II 下降路径最小和之二
  • 原文地址:https://www.cnblogs.com/diegodu/p/4703074.html
Copyright © 2020-2023  润新知