有时我需要将窗口移到一个已经存在的选项卡中,并且我想知道是否存在可以执行此操作的命令/键盘快捷方式。我知道我可以关闭窗口,切换到选项卡,然后以新的方式打开它,但是我想知道是否有更短的方法来完成此操作。请注意,我想将其移至现有标签页,而不是像<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