23

我将 cscope 与 vim 一起使用。当对多个文件进行大量编辑时,cscope 将报告更改文件的旧行号。如何从 vim 重建 cscope db 而不会丢失

  • 在 vim 中打开的选项卡/窗口
  • 与 cscope 引擎的连接

谢谢

4

5 回答 5

31

首先,您需要更新 cscope 数据库。

:!cscope -Rbq

然后,从 vim 重新初始化数据库。

:cs reset
于 2010-08-04T06:19:57.780 回答
9

基于先前的答案,将其添加到您的 .vimrc 中:

map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>                                      

然后在 vim 中使用 F5 进行刷新。

-b = 仅构建交叉引用。-R = 在搜索源文件期间递归子目录。

于 2013-09-24T14:06:25.570 回答
4

cscope_dynamic

cscope_dynamic 可以满足您的所有要求,甚至更多:

  • 打开 vim 时自动加载数据库。
  • 如果存在,则加载本地 cscope 数据库,而不是全局数据库。
  • 优雅地处理连接
  • 自动保存对数据库的更改
  • 它要快得多,尤其是在使用大型源代码库时

它如何更快?

它使用两个数据库:

  • 小型数据库:更新频繁,变化小,速度很快
  • 大数据库:通过将小数据库合并到这个数据库中,它的更新频率较低。

编辑: Feb17: 删除旧答案,因为 cscope_dynamic 开箱即用。

于 2015-07-07T21:23:57.230 回答
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

(实际上这要复杂得多。)

vim 调用应该在 vim 中重新加载 cscope 数据库,如果您使用vim --servername VIM. (我使用后台命令运行 cscope 查询,所以对此我不确定。该命令独立启动 cscope 并且不使用 Vim 的连接。)

于 2011-08-31T17:36:03.497 回答
2

最近在 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>
于 2018-05-22T22:58:22.137 回答