2017-01-11 3 views
2

Это несколько лет, когда я программирую с помощью vim, и я использовал ctags. Я работаю с достаточно большим пакетом C/C++, и мне нужно найти определение функций. Обычно я использую grep + ctags. Недавно я попытался использовать cscope вместо ctags и установил его с Vundle. я вижу следующее сообщение об ошибке для некоторых из моих файловКак исправить дубликат cscope? это лучший способ?

E568: duplicate cscope database not added 

Я искал в Интернете и нашел это: https://blogs.oracle.com/natarajan/entry/avoiding_duplicate_cscope_database_error Это не работает.

Как это исправить?

+0

Ваш лучший выбор на StackOverflow должен придерживаться одного вопроса * на вопрос, а не добавлять второй вопрос в одном сообщении. Как бы то ни было, ваш второй вопрос не является хорошим форматом для StackOverflow; StackOverflow лучше всего работает с вопросами, где может быть «правильный» ответ, а запросы на рекомендации по инструментам не соответствуют этому формату. См. [Какие темы я могу спросить о] (https://stackoverflow.com/help/on-topic) для получения дополнительной информации, в частности «Вопросы, предлагающие нам рекомендовать или найти ...». –

ответ

1

Согласно блогу, «Эта ошибка появляется, когда VIM уже скомпилирован с модулем« CSCOPE », и вы также установили« cscopemenu.vim »». Я предполагаю, что у вас есть исполняемый файл vim с configure d с опцией --enable-cscope.

Вот что я делаю:

  • Скачать источник Cscope и построить его, установить исполняемый файл в директории, которая доступна в вашем PATH
  • Скачать исходный ВИМ код и configure его с --enable-cscope, построить источник и установите исполняемый файл
  • Скачайте cscope_maps.vim и разместите его под каталогом $HOME/.vim/plugin. Это содержит настройки cscope для 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.

  • Update .vimrc файл, чтобы иметь следующие

    if has("cscope") set csprg=<location to cscope executable> set csto=0 cs add <location to cscope.out> endif

Я надеюсь, что после выполнения этих шагов, которые вы должны быть в состоянии использовать Cscope с Vim легко.

Обратите внимание, что если вы работаете над несколькими проектами, вы должны иметь возможность добавлять соответствующие переменные среды, чтобы vim мог выбрать правильную базу данных cscope.

Чтобы ответить на ваш второй вопрос, могу ли я предложить использовать tagbar. Это приведет к отображению имен ваших функций в текущем исходном или заголовочном файле. Вы можете установить его с помощью Vundle. Добавьте следующую строку в .vimrc

Plugin 'majutsushi/tagbar'

Добавьте это к вашему.vimrc для переключения Просмотреть tagbar

nmap <F4> :TagbarToggle<CR>

Обратите внимание, что F4 это всего лишь пример, и вы можете использовать любую привязку сделать то же самое.

0

Расширяя Artem's answer:

помощь Vim для cscopeverbose выглядит следующим образом:

Если 'cscopeverbose' не установлен (по умолчанию), сообщения не будут напечатаны показывает успех или неудачу при добавлении cscope. В идеале вы должны установить этот параметр .vimrc перед добавлением любых баз данных cscope, и после их добавления установить его. С тех пор, когда вы добавите больше баз данных в Vim, вы получите (надеюсь) полезное сообщение в случае сбоя базы данных .

Проблема здесь состоит в том, что (а) существует несколько сценариев, пытающихся загрузить файл cscope.out и (б) они не следуют лучшим практикам отключив «многословное» предупреждение 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 сразу же после этого, но если у вас нет, вы тоже должны добавить это.

Смежные вопросы