обновление БД cscope от vim

Я использую cscope с vim. При выполнении больших изменений для нескольких файлов cscope сообщит старые номера строк для измененных файлов. Как я могу перестроить cscope db из vim без потери

  • открытые вкладки/windowses в Vim
  • соединение с двигателем cscope

спасибо

6 ответов


во-первых, вам нужно обновить базу данных cscope.

:!cscope -Rbq

затем повторно запустите базу данных из vim.

:cs reset

основываясь на предыдущем ответе, добавьте это в свой.vimrc:

map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>                                      

затем используйте F5 в vim для обновления.

- b = построить только перекрестную ссылку. - R = рекурсивные подкаталоги во время поиска исходных файлов.


Я использую скрипт, который продолжает создавать мои индексы в фоновом режиме:

" We need to setup the function that reset cscope.
"You could define this in your vimrc instead.
vim --servername GVIM --remote-send ":function! ResetCscope()<CR>cscope reset<CR>endfunction<CR>"

while true ; do
    echo building...

    ctags -R
    cscope -Rbk
    vim --servername VIM --remote-expr "ResetCscope()"

    echo done. sleeping.
    sleep 1m
done

(фактически много больше сложные чем.)

вызов vim должен перезагрузить базу данных cscope в vim, если вы запустили ее с vim --servername VIM. (Я использую фон команду для запуска запросов cscope, поэтому я не уверен в этом. Команда запускает cscope независимо и не использует соединение Vim.)


cscope_dynamic

cscope_dynamic делает все, что вы просите, и даже больше:

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

как это быстрее?

Он использует две базы данных:

  • небольшой базы данных: он обновляется часто, с небольшими изменениями, так что это действительно быстро
  • большая база данных: он обновляется реже, объединяя небольшую базу данных в эту.

Edit: Feb17: удален старый ответ, поскольку cscope_dynamic делает все это из коробки.


недавно пробовал это в gVim 8.0 на Windows, но даже после сброса cs vim блокировал cscope.так что cs не смог регенерировать cscope.выход с открытым vim.

в этом случае я добавил следующее дополнительное отображение (F12 в e.g) который убивает текущее соединение cscope, поэтому cscope может регенерировать cscope.выход с F11, без необходимости закрывать vim. Надеюсь, это кому-то поможет.

map <F11> :!cscope -Rbq<CR><ESC>:cs add cscope.out<CR><CR> 
map <F12> :cs kill cscope.out<CR><CR>

основываясь на предыдущих ответах, это то, что вы делаете, когда ваш текущий каталог не совпадает с вашим cscope.из файл находится:

map <F5> :!cd /your/cscope.out/dir/ && cscope -bk<CR>:cs reset<CR><CR>