【发布时间】:2011-02-14 04:47:39
【问题描述】:
我将 cscope 与 vim 一起使用。 当对多个文件进行大量编辑时,cscope 将报告更改文件的旧行号。 如何从 vim 重建 cscope db 而不会丢失
- 在 vim 中打开的选项卡/窗口
- 与 cscope 引擎的连接
谢谢
【问题讨论】:
我将 cscope 与 vim 一起使用。 当对多个文件进行大量编辑时,cscope 将报告更改文件的旧行号。 如何从 vim 重建 cscope db 而不会丢失
谢谢
【问题讨论】:
首先,您需要更新 cscope 数据库。
:!cscope -Rbq
然后,从 vim 重新初始化数据库。
:cs reset
【讨论】:
cscope.out 的现有连接时,cscope 会创建另一个 ncscope.out。如何更换旧数据库?我正在使用 Windows cscope 端口。
我使用一个在后台持续构建索引的脚本:
" 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 的连接。)
【讨论】:
在上一个答案的基础上,将其添加到您的 .vimrc 中:
map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>
然后在 vim 中使用 F5 进行刷新。
-b = 仅构建交叉引用。 -R = 在搜索源文件期间递归子目录。
【讨论】:
cscope_dynamic 可以满足您的所有要求,甚至更多:
它使用两个数据库:
编辑: 2 月 17 日: 删除了旧答案,因为 cscope_dynamic 开箱即用。
【讨论】:
最近在 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>
【讨论】: