【问题标题】:jump to cscope definition in an buffer already open跳转到已经打开的缓冲区中的 cscope 定义
【发布时间】:2014-04-24 13:27:58
【问题描述】:

我通常使用cscope 来浏览我的代码。每当我点击C ] 时,我正在读取的当前缓冲区都会发生变化,并且会显示包含定义的文件。

假设我已经在 vim 中有一个选项卡,该文件已经打开:是否可以从我当前的位置直接跳转到已经打开的文件?

我不需要拆分,只需跳转到已在缓冲区中打开的文件。

【问题讨论】:

    标签: c++ c vim cscope


    【解决方案1】:

    您可以通过组合选项来接近您想要的:

    " use the quickfix list/window for all cscope queries
    set cscopequickfix=s-,g-,c-,d-,i-,t-,e-
    
    " quickfix commands jump to the target buffer where it is displayed
    set switchbuf=useopen,usetab
    

    以及重新映射:

    " override the default <C-]> behaviour
    nnoremap <C-]> :cs f g <C-R><C-w><CR>
    

    【讨论】:

    • 这种映射相对于 `set cscopetag' 有什么优势?
    • @PeterRincker, cscopetag 是我的第一个想法,但这里没有预期的行为。如果只有我一个人,那么set cscopetag显然是一种更清洁的方法。
    • 我不会撒谎,'cscopetag' 真的让我失望了。我刚试了一下,它不服从'switchbuf' 选项(7.4 补丁 1-52)。这是一个错误吗?还是功能?
    • @PeterRincker,7.4.131 在这里。我相当有信心在 Linux 和 Mac OS X 上的早期 7.3 版本中遇到了同样的错误行为::cstag 按预期工作,但&lt;C-]&gt; 没有。因此,看似多余的映射。
    【解决方案2】:

    对于普通标签,有&lt;C-W&gt;] 映射和:stag 命令在标签跳转前分割窗口。

    对于 cscope,有 :cstag,但没有 :scstag,因此您必须执行单独的命令,例如:

    :split | cstag ...
    

    您可能可以通过这种方式修改/添加您拥有的C ] 映射。

    理想情况下,这将考虑'switchbuf' 设置,并重新使用显示该目标缓冲区的现有窗口,而不是进行拆分。不幸的是,Vim current 并没有这样的行为,并且自己实现这一点很困难,主要是因为您必须在跳转之前以某种方式获取目标文件,以通过 bufwinnr() 检查缓冲区可用性。

    【讨论】:

    • 谢谢,但我真的不需要拆分。我只是想跳转到一个已经在 VIM 中打开的文件。
    • 嗯,我在想'switchbuf' 功能;添加了解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多