我使用带有vim的cscope。 对多个文件进行大量编辑时,cscope将报告已更改文件的旧行号。 如何从vim重建cscope db而不会丢失
由于
答案 0 :(得分:25)
首先,您需要更新cscope数据库。
:!cscope -Rbq
然后,从vim重新启动数据库。
:cs reset
答案 1 :(得分:6)
根据之前的回答,将其添加到.vimrc:
map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>
然后在vim中使用F5进行刷新。
-b =仅构建交叉引用。 -R =在搜索源文件时递归子目录。
答案 2 :(得分:2)
我使用的脚本在后台继续构建索引:
" 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
(实际上比a lot多complicated。)
如果使用vim --servername VIM
启动vim调用,则应在vim中重新加载cscope数据库。 (我使用background command来运行cscope查询,所以我不确定这个。该命令独立启动cscope并且不使用Vim的连接。)
答案 3 :(得分:2)
cscope_dynamic可以满足您的所有要求,甚至更多:
它使用两个数据库:
编辑:2月17日: 删除了旧答案,因为cscope_dynamic可以开箱即用。
答案 4 :(得分:1)
最近在Windows上的gVim 8.0中尝试过,但即使在cs重置后,vim也锁定了cscope.out,因此cs无法在vim打开的情况下重新生成cscope.out。
在这种情况下,我添加了以下附加映射(例如F12),它会终止当前的cscope连接,因此cscope可以使用F11重新生成cscope.out,而无需关闭vim。希望这对某人有所帮助。
map <F11> :!cscope -Rbq<CR><ESC>:cs add cscope.out<CR><CR>
map <F12> :cs kill cscope.out<CR><CR>
答案 5 :(得分:0)
根据以前的答案,当您的当前目录与cscope.out文件所在目录不同时,您就会这样做:
map <F5> :!cd /your/cscope.out/dir/ && cscope -bk<CR>:cs reset<CR><CR>