从vim更新cscope db

时间:2010-04-30 10:59:37

标签: vim cscope

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

  • 在vim中打开标签/窗口
  • 与cscope engine的连接

由于

6 个答案:

答案 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 lotcomplicated。)

如果使用vim --servername VIM启动vim调用,则应在vim中重新加载cscope数据库。 (我使用background command来运行cscope查询,所以我不确定这个。该命令独立启动cscope并且不使用Vim的连接。)

答案 3 :(得分:2)

cscope_dynamic

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

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

如何更快?

它使用两个数据库:

  • 小型数据库:它经常更新,只需很少的更改,所以速度非常快
  • 大数据库:通过将小型数据库合并到此数据库中,它的更新频率会降低。

编辑: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>