这几年我用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它不起作用。
我怎样才能解决这个问题?
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
,但是如果你没有,你也应该添加它。
找到适合我的解决方案(这里:http://thoughtsolo.blogspot.com/2014/02/cscope-issue-duplicate-cscope-database.html):
只需将此行“set nocscopeverbose”添加到〜/ .vimrc文件中即可。
根据博客,“当VIM已经使用'CSCOPE'模块编译并且您还安装了”cscopemenu.vim“时,会弹出此错误。我假设你有一个vim可执行文件已经configure
d与--enable-cscope
选项。
这是我做的:
PATH
中可用的目录中configure
下载vim源代码和--enable-cscope
,构建源代码并安装可执行文件$HOME/.vim/plugin
目录下。这包含vim的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
数据库文件。
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
只是一个示例,您可以使用任何绑定来执行相同操作。