似乎无法使用vim加载CCTree数据库

似乎无法使用vim加载CCTree数据库,vim,cscope,Vim,Cscope,我正在尝试为vim使用CCTree插件,但是当我尝试在vimrc中添加以下行以在每次打开vim时自动加载CCTree的cscope数据库时,我得到了一个错误。这是直接从CCTree网站()复制的命令: 我得到的错误是: Error detected while processing VimEnter Auto commands for "*": E172: Only one file name allowed: CCTreeLoadDB cscope.out | endif 我本以为这会工作

我正在尝试为vim使用CCTree插件,但是当我尝试在vimrc中添加以下行以在每次打开vim时自动加载CCTree的cscope数据库时,我得到了一个错误。这是直接从CCTree网站()复制的命令:

我得到的错误是:

Error detected while processing VimEnter Auto commands for "*":
E172: Only one file name allowed:  CCTreeLoadDB cscope.out | endif

我本以为这会工作,因为它是直接从CCtree网站,但我不知道如何调试,因为我几乎没有使用/编辑我的vimrc文件。任何帮助都将不胜感激。

似乎
CCTreeLoadDB
认为
endif
是它命令的参数,而不是
if
的分隔符

将其包装在函数中,使
if
语句位于多行上,从而使
autocmd
工作

function! LoadCCTree()
    if filereadable('cscope.out')
        CCTreeLoadDB cscope.out
    endif
endfunc
autocmd VimEnter * call LoadCCTree()
使用一个不使用函数包装器的线性程序。将
CCTreeLoadDB
包装在exec中,以免混淆

autocmd VimEnter * if filereadable('cscope.out') | exec "CCTreeLoadDB 'cscope.out'" | endif


查看Ingo Karkat的答案,了解为什么
CCTreeLoadDB
不能与

一起工作
CCTreeLoadDB
似乎认为
endif
是它命令的参数,而不是
if
的分隔符

将其包装在函数中,使
if
语句位于多行上,从而使
autocmd
工作

function! LoadCCTree()
    if filereadable('cscope.out')
        CCTreeLoadDB cscope.out
    endif
endfunc
autocmd VimEnter * call LoadCCTree()
使用一个不使用函数包装器的线性程序。将
CCTreeLoadDB
包装在exec中,以免混淆

autocmd VimEnter * if filereadable('cscope.out') | exec "CCTreeLoadDB 'cscope.out'" | endif


参见Ingo Karkat的答案,了解为什么
CCTreeLoadDB
不能与
|

一起使用,您只能链接使用
-bar
定义的命令。如果
:CCTreeLoadDB
命令仅获取文件名,则可以安全地修改它:

:command! -bar ... CCTreeLoadDB ...

您可以向插件的作者发送这样的建议。同时,最好将命令包装在
:execute

中。您只能链接使用
-bar
定义的命令。如果
:CCTreeLoadDB
命令仅获取文件名,则可以安全地修改它:

:command! -bar ... CCTreeLoadDB ...

您可以向插件的作者发送这样的建议。同时,最好将命令包装在
:execute

中,这非常有效,谢谢!他们真的应该为像我这样对使用vimrc文件经验很少的人更新他们的说明。顺便说一下,我使用了函数方法(供将来参考)。这非常有效,谢谢!他们真的应该为像我这样对使用vimrc文件经验很少的人更新他们的说明。顺便说一下,我使用了函数方法(供将来参考)。