обновить базу данных cscope от vim - PullRequest
20 голосов
/ 30 апреля 2010

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

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

Спасибо

Ответы [ 6 ]

25 голосов
/ 04 августа 2010

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

:!cscope -Rbq

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

:cs reset
6 голосов
/ 24 сентября 2013

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

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

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

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

2 голосов
/ 08 июля 2015

cscope_dynamic

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

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

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

Используются две базы данных:

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

Редактировать: 17 февраля: Удален старый ответ, поскольку cscope_dynamic делает все это из коробки.

2 голосов
/ 31 августа 2011

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

" 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.)

1 голос
/ 23 мая 2018

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

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

map <F11> :!cscope -Rbq<CR><ESC>:cs add cscope.out<CR><CR> 
map <F12> :cs kill cscope.out<CR><CR>
0 голосов
/ 09 октября 2016

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

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