обновление БД 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>