我将 cscope 与 vim 一起使用。当对多个文件进行大量编辑时,cscope 将报告更改文件的旧行号。如何从 vim 重建 cscope db 而不会丢失
- 在 vim 中打开的选项卡/窗口
- 与 cscope 引擎的连接
谢谢
首先,您需要更新 cscope 数据库。
:!cscope -Rbq
然后,从 vim 重新初始化数据库。
:cs reset
基于先前的答案,将其添加到您的 .vimrc 中:
map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>
然后在 vim 中使用 F5 进行刷新。
-b = 仅构建交叉引用。-R = 在搜索源文件期间递归子目录。
cscope_dynamic 可以满足您的所有要求,甚至更多:
它使用两个数据库:
编辑: Feb17: 删除旧答案,因为 cscope_dynamic 开箱即用。
我使用一个在后台持续构建索引的脚本:
" 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 调用应该在 vim 中重新加载 cscope 数据库,如果您使用vim --servername VIM
. (我使用后台命令运行 cscope 查询,所以对此我不确定。该命令独立启动 cscope 并且不使用 Vim 的连接。)
最近在 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>