【发布时间】:2014-04-24 13:27:58
【问题描述】:
我通常使用cscope 来浏览我的代码。每当我点击C ] 时,我正在读取的当前缓冲区都会发生变化,并且会显示包含定义的文件。
假设我已经在 vim 中有一个选项卡,该文件已经打开:是否可以从我当前的位置直接跳转到已经打开的文件?
我不需要拆分,只需跳转到已在缓冲区中打开的文件。
【问题讨论】:
我通常使用cscope 来浏览我的代码。每当我点击C ] 时,我正在读取的当前缓冲区都会发生变化,并且会显示包含定义的文件。
假设我已经在 vim 中有一个选项卡,该文件已经打开:是否可以从我当前的位置直接跳转到已经打开的文件?
我不需要拆分,只需跳转到已在缓冲区中打开的文件。
【问题讨论】:
您可以通过组合选项来接近您想要的:
" 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>
【讨论】:
cscopetag 是我的第一个想法,但这里没有预期的行为。如果只有我一个人,那么set cscopetag显然是一种更清洁的方法。
'cscopetag' 真的让我失望了。我刚试了一下,它不服从'switchbuf' 选项(7.4 补丁 1-52)。这是一个错误吗?还是功能?
:cstag 按预期工作,但<C-]> 没有。因此,看似多余的映射。
对于普通标签,有<C-W>] 映射和:stag 命令在标签跳转前分割窗口。
对于 cscope,有 :cstag,但没有 :scstag,因此您必须执行单独的命令,例如:
:split | cstag ...
您可能可以通过这种方式修改/添加您拥有的C ] 映射。
理想情况下,这将考虑'switchbuf' 设置,并重新使用显示该目标缓冲区的现有窗口,而不是进行拆分。不幸的是,Vim current 并没有这样的行为,并且自己实现这一点很困难,主要是因为您必须在跳转之前以某种方式获取目标文件,以通过 bufwinnr() 检查缓冲区可用性。
【讨论】:
'switchbuf' 功能;添加了解释。