【问题标题】:update cscope db from vim从 vim 更新 cscope 数据库
【发布时间】:2011-02-14 04:47:39
【问题描述】:

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

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

谢谢

【问题讨论】:

标签: vim cscope


【解决方案1】:

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

:!cscope -Rbq

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

:cs reset

【讨论】:

  • 当存在与 cscope 数据库 cscope.out 的现有连接时,cscope 会创建另一个 ncscope.out。如何更换旧数据库?我正在使用 Windows cscope 端口。
  • 错误:“cscope:命令行和旧符号数据库之间的-q 选项不匹配”
【解决方案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 的连接。)

【讨论】:

  • 糟糕。我忘记了,因为我使用巨大的 cscope 数据库,搜索需要几秒钟,所以我很少直接调用 vim 的 cscope 命令。我已经更新了重置 cscope 连接的答案。
【解决方案3】:

在上一个答案的基础上,将其添加到您的 .vimrc 中:

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

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

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

【讨论】:

    【解决方案4】:

    cscope_dynamic

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

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

    如何更快?

    它使用两个数据库:

    • 小型数据库:更新频繁,改动小,速度很快
    • 大数据库:通过将小数据库合并到这个数据库中来减少更新频率。

    编辑: 2 月 17 日: 删除了旧答案,因为 cscope_dynamic 开箱即用。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多