从vim更新cscope数据库

从vim更新cscope数据库,vim,cscope,Vim,Cscope,我将cscope与vim一起使用。 对多个文件进行大编辑时,cscope将报告更改文件的旧行号。 如何从vim重建cscope db而不丢失 在vim中打开的选项卡/窗口 与cscope引擎的连接 谢谢首先,您需要更新cscope数据库 :!cscope -Rbq 然后,从vim重新初始化数据库 :cs reset 我使用一个脚本在后台不断构建索引: " We need to setup the function that reset cscope. "You could define

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

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

谢谢

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

:!cscope -Rbq
然后,从vim重新初始化数据库

:cs reset

我使用一个脚本在后台不断构建索引:

" 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
“我们需要设置重置cscope的函数。
“您可以在vimrc中定义它。
vim--servername GVIM--remote send“:function!ResetCscope()cscope resetendfunction”
虽然真实;做
回声大厦。。。
ctags-R
cscope-Rbk
vim--servername vim--remote expr“ResetCscope()”
回音完毕。睡觉。
睡1米
完成
(事实上不止如此。)


如果使用
vim--servername vim
启动cscope数据库,那么vim调用应该在vim中重新加载它。(我使用a来运行cscope查询,所以对此我不确定。该命令独立启动cscope,不使用Vim的连接。)

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

map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>                                      
map:!cscope-Rb:cs重置
然后在vim中使用F5进行刷新

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

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

  • 打开vim时自动加载数据库
  • 加载本地cscope数据库(如果存在),而不是全局数据库
  • 优雅地处理连接
  • 自动保存对数据库的更改
  • 它的速度要快得多,尤其是在处理大型源代码库时
怎么会更快? 它使用两个数据库:

  • 小型数据库:它更新频繁,变化很小,所以速度非常快
  • 大型数据库:通过将小型数据库合并到此数据库中,更新频率会降低

编辑:2017年2月:
删除了旧答案,因为cscope\u dynamic会开箱即用地完成所有这些操作。

根据以前的答案,当您的当前目录与cscope.out文件所在的目录不同时,您会这样做:

map <F5> :!cd /your/cscope.out/dir/ && cscope -bk<CR>:cs reset<CR><CR>
map:!cd/your/cscope.out/dir/&&cscope-bk:cs重置

最近在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>
map:!cscope-Rbq:cs添加cscope.out
地图:cs kill cscope.out

Oops。我忘记了,因为我使用了巨大的cscope数据库,搜索需要几秒钟,所以我很少直接调用vim的cscope命令。我已更新了重置cscope连接的答案。当存在到cscope数据库的现有连接时,
cscope.out
,cscope将创建另一个
ncscope.out
。如何替换旧数据库?我正在使用Windows cscope端口。错误:“cscope:-q命令行和旧符号数据库之间的选项不匹配”请查看: