我在Vim工作,在各种选项卡的各种窗口中都有许多打开的缓冲区。 我知道,只需将一个现有的缓冲区加载到当前窗口中就可以了。 但是,对于大文件,我的一些缓冲区使用折叠expression式,将数据加载到新窗口时会导致延迟几秒。 另一方面,如果他们已经在一个标签页的窗口中打开,我只需跳转到该标签页和该窗口。
我收集没有直接这样做的命令。 或者在那里?
要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
。