在已经打开的缓冲区中跳转到cscope定义

时间:2014-04-24 13:27:58

标签: c++ c vim cscope

我通常使用cscope来浏览我的代码。每当我点击当前缓冲区C ]时,我正在读取更改,并显示包含该定义的文件。

假设我已经在vim中有一个标签已经打开了该文件:无论如何要从我当前的位置直接跳转到已经打开的文件?

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

2 个答案:

答案 0 :(得分:2)

您可以通过多种选项接近您想要的东西:

" 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>

答案 1 :(得分:1)

对于普通标签,有<C-W>]映射和:stag命令在标签跳转之前拆分窗口。

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

:split | cstag ...

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

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