为什么在vim中组合cscope和ctags会显示与类无关的函数定义的结果?

时间:2015-10-14 15:57:19

标签: c++ vim cscope exuberant-ctags

我在vim编辑器中使用cscope和ctags进行c ++项目。我已经从项目的根目录生成了如下的ctags和cscope文件。

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
find . -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" > cscope.files
cscope -q -R -b -i cscope.files

我的〜/ .vimrc文件内容如下。

set tags+=./tags;/
filetype plugin on

cs add $CSCOPE_DB

我在.bashrc中添加了以下行

export CSCOPE_DB=/home/kadina/build/platform/component/platform/stb/cscope.out

我已经从互联网上下载了cscope_maps.vim并将其放在〜/ .vim / plugin /

但是当我试图通过ctrl +}找到函数的定义时,它会列出所有具有相同名称的函数定义,而不是导航到正确的函数。

例如,当我试图找到VZ_DIAGNOSTICS :: getInstance()的定义时,它不会导航到VZ_DIAGNOSTICS :: getInstance()的定义,而是列出名称为getInstance的所有函数定义( )。

当我试图通过ctrl + \ + c找到谁调用此函数时,我遇到了同样的问题。它列出了调用getInstance()的函数,而不是列出调用VZ_DIAGNOSTICS :: getInstance()的函数。

任何人都可以让我知道我需要做些什么改变来正确地处理这些事情?

1 个答案:

答案 0 :(得分:1)

因为它使用cstags而不是ctags。
这是我使用的配置。我不需要安装cscope_maps.vim,因为我不需要cscope的键盘快捷键。 set nocscopetag禁用cstags。其他内容使它无需环境变量即可自动在git项目中加载cscope.out。

set nocscopetag
if filereadable("cscope.out")
    cscope add cscope.out  
else
    let git_path = finddir('.git', '.;')
    let cscope_path = git_path . "/../cscope.out"
    let proj_dir = git_path . "/../"
    if filereadable(cscope_path)
        execute "cscope add " . cscope_path . ' ' . proj_dir
    endif
endif