我在vim中使用cscope。当对多个文件进行大规模编辑时,cscope会报告已更改文件的旧行号。 如何在不丢失已打开标签/窗口和与cscope引擎的连接的情况下从vim重新构建cscope数据库?
- 已在vim中打开的标签/窗口
- 与cscope引擎的连接
谢谢。
首先,您需要更新cscope数据库。
:!cscope -Rbq
然后,从 vim 重新初始化数据库。
:cs reset
cscope.out
的连接时,cscope会创建另一个ncscope.out
。如何替换旧的数据库?我正在使用Windows cscope端口。 - Michal Čizmazia在之前的答案基础上,将以下内容添加到您的 .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 --servername VIM
启动了 vim,那么 vim 调用应该会重新加载 cscope 数据库。(我使用 后台命令 运行 cscope 查询,所以对此不是很确定。该命令会独立地启动 cscope,而不使用 Vim 的连接。)
最近在Windows上的gVim 8.0中尝试了这个功能,但即使进行了cs重置,vim仍然会锁定cscope.out,以至于cs无法在vim打开的情况下重新生成cscope.out。
在这种情况下,我添加了以下额外的映射(例如F12),它可以终止当前的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>