首页 文章

从vim更新cscope db

提问于
浏览
20

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

  • 在vim中打开了标签/窗口

  • 与cscope引擎的连接

谢谢

6 回答

  • 1

    根据以前的答案,这是当您的当前目录与cscope.out文件所在目录不同时执行的操作:

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

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

    :!cscope -Rbq
    

    然后,从vim重新启动数据库 .

    :cs reset
    
  • 0

    在之前的答案的基础上,将其添加到.vimrc:

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

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

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

  • 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
    

    (实际上它比那更多complicated . )

    如果你用 vim --servername VIM 启动它,vim调用应该在vim中重新加载cscope数据库 . (我使用background command来运行cscope查询,所以我'm not sure about this. The command launches cscope independently and doesn'使用Vim的连接 . )

  • 2

    cscope_dynamic

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

    打开vim时

    • 自动加载数据库 .

    • 加载本地cscope数据库(如果存在),而不是全局数据库 .

    • 正常处理连接

    • 自动保存对数据库的更改

    • 它快得多,特别是在使用大型源代码时

    怎么更快?

    它使用两个数据库:

    • small database: 它经常更新,只需很小的更改,所以速度非常快

    • big database: 通过将小型数据库合并到此数据库中,它的更新频率较低 .


    Edit: Feb17:删除旧答案,因为cscope_dynamic开箱即用 .

  • 25

    最近在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>
    

相关问题