如何移动到某些选项卡上某个窗口中存在的非隐藏缓冲区?

我在Vim工作,在各种选项卡的各种窗口中都有许多打开的缓冲区。 我知道,只需将一个现有的缓冲区加载到当前窗口中就可以了。 但是,对于大文件,我的一些缓冲区使用折叠expression式,将数据加载到新窗口时会导致延迟几秒。 另一方面,如果他们已经在一个标签页的窗口中打开,我只需跳转到该标签页和该窗口。

我收集没有直接这样做的命令。 或者在那里?

要find所需的缓冲区窗口,我可以写一个这样做的函数:

  1. 为每个选项卡
  2. 为每个选项卡上的每个窗口
  3. 检查每个窗口,看看是否有我所需的缓冲区加载
  4. 移动光标到find的窗口,或者如果找不到,打开新窗口的窗口中的缓冲区

有人已经写了这个? 还是我错过了简单的方法得到我想要的?

更新:'switchbuf'的答案正是我正在寻找,但我仍然可能最终会使用自定义函数,因为(1)我不理解'newtab'选项的行为,因为窗口仍然被拆分,( 2)我的function适应search卸载的文件:

function! Sbuf(filename) let myvar = '' tabdo let myvar = bufwinnr(a:filename) > 0 ? tabpagenr() \ . ' ' . bufwinnr(a:filename) : myvar if myvar > '' silent execute split(myvar)[0] . "tabn" silent execute split(myvar)[1] . "wincmd w" else execute 'tab drop ' . a:filename endif endfunction 

只需设置switchbuf选项:

 :set switchbuf=useopen,usetab :sbuf [filename] 

如果您不希望switchbuf选项switchbuf打开,那么您将需要编写一个更改的函数,然后重置switchbuf选项。

 function MySwitchBuf(filename) " remember current value of switchbuf let l:old_switchbuf = &switchbuf try " change switchbuf so other windows and tabs are used set switchbuf=useopen,usetab execute 'sbuf' a:filename finally " restore old value of switchbuf let &switchbuf = l:old_switchbuf endtry endfunction 

如果我没有遗漏某些东西,那么你所说的行为是由switchbuf选项来控制的。 它定义了在哪里查找缓冲区用户的要求(当前窗口,其他选项卡中的所有窗口或无处,即每次从头开始打开文件)以及如何打开缓冲区(在新的分割,选项卡或当前窗口中)。 所以我认为,

 set switchbuf=usetab 

可以为你解决问题。 这命令Vim不打开文件,而是跳到包含缓冲区的窗口,即使该窗口位于其他标签页中。 有关其他选项,请看:h switchbuf