如何修复重复的cscope?这是一种更好的方式吗?

问题描述 投票:7回答:3

这几年我用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 ctags cscope
3个回答
6
投票

扩展Artem's answer

Vaz对cscopeverbose的帮助如下:

如果未设置'cscopeverbose'(默认值),则不会打印消息,指示添加cscope数据库时成功或失败。理想情况下,您应该在添加任何cscope数据库之前在.vimrc中重置此选项,并在添加它们之后进行设置。从那时起,当您在Vim中添加更多数据库时,如果无法添加数据库,您将获得(希望)有用的消息。

这里的问题是:(a)有多个脚本试图加载cscope.out文件;(b)他们没有遵循在加载文件之前禁用“详细”cscope警告的最佳做法,然后再重新启用它,如上面的帮助文本建议。

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

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文件以在set nocscopeverbose线之前立即添加cs add ...。我的这个文件的版本之后已经有了set cscopeverbose,但是如果你没有,你也应该添加它。


5
投票

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

只需将此行“set nocscopeverbose”添加到〜/ .vimrc文件中即可。


1
投票

根据博客,“当VIM已经使用'CSCOPE'模块编译并且您还安装了”cscopemenu.vim“时,会弹出此错误。我假设你有一个vim可执行文件已经configured与--enable-cscope选项。

这是我做的:

  • 下载cscope源代码并构建它,将可执行文件安装在PATH中可用的目录中
  • 使用configure下载vim源代码和--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数据库时执行别名。这两个命令最终创建了创建cscope.out数据库文件。

  • 更新.vimrc文件以获得以下内容 if has("cscope") set csprg=<location to cscope executable> set csto=0 cs add <location to cscope.out> endif

我希望在完成这些步骤之后你应该能够轻松地使用带有vim的cscope。

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

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

Plugin 'majutsushi/tagbar'

将其添加到.vimrc以切换标签栏视图

nmap <F4> :TagbarToggle<CR>

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

© www.soinside.com 2019 - 2024. All rights reserved.