如何修复重复的 cscope?这是更好的方法吗?

How to fix duplicate cscope ? is it a better way?

我用 vim 编程已经好几年了,我用过 ctags。 我正在使用一个相当大的 C/C++ 包,我需要找到函数的定义。我通常使用grep + ctags。 最近我尝试使用 cscope 代替 ctags 并使用 Vundle 安装它。 我的一些文件出现以下错误

E568: duplicate cscope database not added

我在网上搜索了一下,发现了这个: https://blogs.oracle.com/natarajan/entry/avoiding_duplicate_cscope_database_error 没用。

我该如何解决这个问题?

根据博客,“当 VIM 已经使用 'CSCOPE' 模块编译并且您还安装了 "cscopemenu.vim"”。我假设您有一个 vim 可执行文件,其中 configured 带有 --enable-cscope 选项。

这是我的做法:

  • 下载 cscope 源代码并构建它,将可执行文件安装在 PATH
  • 中可用的目录中
  • 下载 vim 源代码并 configure 使用 --enable-cscope,构建源代码并安装可执行文件
  • 下载 cscope_maps.vim 并将其放在 $HOME/.vim/plugin 目录下。这包含 vim.
  • 的 cscope 设置
  • 从源文件和头文件创建 cscope 数据库。你可以做类似下面的事情

find $PROJECT_HOME -name *.c -o -name "*.cpp" -o -name "*.cc" -o -name "*.h" -o -name "*.hpp" > cscope.files

cscope -qbR -i cscope.files

您可以将这些命令添加到别名中,并在每次要更新 cscope 数据库时执行别名。这两个命令create finally create cscope.out 数据库文件。

  • 更新 .vimrc 文件以具有以下内容

    if has("cscope") set csprg=<location to cscope executable> set csto=0 cs add <location to cscope.out> endif

我希望在完成这些步骤后,您应该能够轻松地将 cscope 与 vim 一起使用。

请注意,如果您正在处理多个项目,您应该能够添加适当的环境变量以使 vim 能够选择正确的 cscope 数据库。

为了回答你的第二个问题,我建议使用 tagbar。这将在当前源文件或头文件中列出您的函数名称。您可以使用 Vundle 安装它。将以下行添加到您的 .vimrc

Plugin 'majutsushi/tagbar'

将此添加到您的 .vimrc 以切换标签栏视图

nmap <F4> :TagbarToggle<CR>

请注意 F4 只是一个示例,您可以使用任何绑定来执行相同的操作。

找到适合我的解决方案(此处:http://thoughtsolo.blogspot.com/2014/02/cscope-issue-duplicate-cscope-database.html):

只需将这一行 "set nocscopeverbose " 添加到您的 ~/.vimrc 文件中。

上扩展:

cscopeverbose的Vim帮助如下:

If 'cscopeverbose' is not set (the default), messages will not be printed indicating success or failure when adding a cscope database. Ideally, you should reset this option in your .vimrc before adding any cscope databases, and after adding them, set it. From then on, when you add more databases within Vim, you will get a (hopefully) useful message should the database fail to be added.

这里的问题是 (a) 有多个脚本试图加载 cscope.out 文件,并且 (b) 它们没有遵循禁用 "verbose" cscope 警告的最佳实践按照上面帮助文本的建议,然后 re-enabling 加载文件。

完整的错误输出应该会告诉您哪个脚本触发了这个警告;对我来说它看起来像这样:

Error detected while processing /home/me_and/.vim/plugin/cscope_maps.vim:
line   42:
E568: duplicate cscope database not added

修复方法是编辑 ~/.vim/plugin/cscope_maps.vim 文件,在 cs add ... 行之前添加 set nocscopeverbose。我的这个文件的版本后面已经有 set cscopeverbose,但如果你的没有,你也应该添加它。