Не удается загрузить базу данных CCTree с помощью vim

Я пытаюсь использовать плагин CCTree для vim, но когда я пытаюсь добавить следующую строку в свой vimrc для автоматической загрузки базы данных cscope для CCTree каждый раз, когда открывается vim, я получаю сообщение об ошибке. Эта команда скопирована прямо с веб-сайта 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. Любая помощь будет оценена по достоинству.


person still.Learning    schedule 28.06.2013    source источник


Ответы (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

См. ответ Инго Карката, почему CCTreeLoadDB не работает с |

person FDinoff    schedule 28.06.2013
comment
Это сработало отлично, спасибо! Им действительно следует обновить свои инструкции для таких людей, как я, у которых очень мало опыта использования файла vimrc. Между прочим, я использовал метод функции (для дальнейшего использования). - person still.Learning; 28.06.2013

Вы можете связывать только те команды, которые определены с помощью -bar. Если команда :CCTreeLoadDB просто принимает имя файла, было бы безопасно изменить его:

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

Вы можете отправить такое предложение автору плагина. А пока лучше всего обернуть команду в :execute.

person Ingo Karkat    schedule 28.06.2013