<C-w>T
那样移至新标签页。#1 楼
尽管在当前选项卡页面中有命令可以移动现有窗口(即,通过旋转,调整大小和移动来影响窗口布局),但没有命令可以将窗口移动至另一个选项卡。窗口只是已加载缓冲区的视口,您必须:
请注意当前窗口中显示的缓冲区编号。
br切换到现有的目标选项卡页面。
:close!
重新打开它的缓冲区号。您也可以在脚本中保存和恢复它们。评论
我认为情况就是如此。我可能会制作一个可以做到这一点的小脚本。
–EvergreenTree
15年5月26日在12:17
#2 楼
下面定义的两个命令将所有缓冲区从右侧选项卡移至当前选项卡,然后关闭右侧选项卡。Mtabsp
通过水平拆分移动它们,Mtabvsp
垂直拆分。使用命令之前,需要移动合并的选项卡。使用+tabm
,-tabm
或<n>tabm
。设置
将以下vim脚本添加到
vimrc
中:function! Mtab(vert)
if tabpagenr() == tabpagenr("$")
return 0
endif
+tabnext
let s:killed_tab = tabpagenr()
let s:buf_list = tabpagebuflist()
-tabnext
for item in s:buf_list
if a:vert
vsp
else
sp
endif
execute "buf " . item
endfor
execute "tabclose " . s:killed_tab
endfunction
command! Mtabsp call Mtab(0)
command! Mtabvsp call Mtab(1)
技术细节
功能Mtab接收一个参数
vert
。它确定当前选项卡是水平拆分还是垂直拆分。通过以下步骤可以实现所需的结果: br />使用两个变量引用其选项卡编号和缓冲区
返回当前选项卡
我们拆分选项卡并打开每个缓冲区
最后,我们关闭右侧的选项卡
如果当前选项卡位于最后,则将忽略命令。
#3 楼
转到现有目标标签
随便分割它
:b ab
(其余部分均用标签完成)ab
只是随机字母,请替换以所需文件名的开头。 :b
制表符对我的表现很好,它通常可以基于一个字母和1-2个Tab
按键来找到正确的源缓冲区。这种方法相对Ingo的好处是缺乏注意或记住任何东西,意味着更少的认知负担。您已经知道的文件名。
#4 楼
如果它是文件缓冲区(不适用于暂存缓冲区等),则可以::let @f=@%
ENTER —在源窗口中; 这将常规寄存器f的内容替换为包含当前文件名的特殊寄存器%的内容。
您可以通过以下方法验证寄存器是否包含正确的路径:
:echo @f
可选:Ctrl-WCtrl-Q —关闭旧窗口;
gt / gT-导航至目标选项卡(和窗口);
Ctrl-Ws-以任意方式拆分选项卡,以打开新窗口;
:e␣
Ctrl-RfENTER 在新打开的窗口中,从存储在寄存器f中的路径中加载文件;
注意:此处的␣字符标记规则的空格。
重要提示:如果路径中包含空格或某些特殊字符,则最后一步将无法正常工作! :-(作为一种解决方法,以下稍长的命令应适用于带有空格的路径(尽管对于某些其他特殊字符它可能仍然会失败):
(即,引用Ctrl-R,f的结果)
受到lkraav和ingo-karkat的回答的启发。
评论
太棒了,我需要为Windows的“剪切和粘贴”设置映射到选项卡。
–dragon788
18年5月15日在17:13
#5 楼
我遇到了相同的问题,并决定编写微小的(2 sloc)帮助程序命令。关闭要移动的缓冲区,然后在任意位置重新打开它,例如“拉动”缓冲区。评论
欢迎来到Vi和Vim,并感谢您的贡献!
–filbranden♦
20年6月4日,2:30
重要说明:脚本必须独立于用户设置,才能普遍使用。在这种情况下,您确实应该使用hide quit而不是简单地使用q。
–马特
20年6月4日在4:48
没错,不得强制将隐藏设置设为使用插件。话虽如此,我偶然发现隐藏的集从一开始就不需要,所以我重写了文档。无论如何,我非常感谢您的建议,谢谢@Matt。
–usp
20年6月4日在14:03
评论
无法在标签之间移动窗口。嗯,那太糟糕了。我可能可以创建一些映射或命令来完成它。
我认为您最好的办法是保存所有窗口设置,然后在现有选项卡上重新创建它。