Подтвердить что ты не робот

Обновить cscope db от vim

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

  • открытые вкладки/окна в vim
  • соединение с движком cscope

Спасибо

4b9b3361

Ответ 1

Сначала вам нужно обновить базу данных cscope.

:!cscope -Rbq

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

:cs reset

Ответ 2

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

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

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

Ответ 3

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

" 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 подключение.)

Ответ 4

cscope_dynamic

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

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

Как это происходит быстрее?

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

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

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

Ответ 5

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

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