我正在尝试为vim使用CCTree插件,但是当我尝试将以下行添加到我的vimrc以在每次打开vim时为CCTree自动加载cscope数据库时,我收到错误。这是直接从CCTree网站(https://sites.google.com/site/vimcctree/faq)复制的命令:
autocmd VimEnter * if filereadable('cscope.out') | CCTreeLoadDB cscope.out | endif
我得到的错误是:
Error detected while processing VimEnter Auto commands for "*":
E172: Only one file name allowed: CCTreeLoadDB cscope.out | endif
我原本以为这会起作用,因为它直接来自CCtree网站,但我不知道如何调试这个,因为我几乎没有使用/编辑我的vimrc文件。任何帮助将不胜感激。
答案 0 :(得分:2)
似乎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
无法与|
答案 1 :(得分:1)
您只能链接使用-bar
定义的命令。如果:CCTreeLoadDB
命令只是一个文件名,那么修改它是安全的:
:command! -bar ... CCTreeLoadDB ...
您可以向插件的作者发送此类建议。在此期间,最好将命令包装在:execute
。