Vim:在新标签页中打开每个缓冲区

43

我想知道如何在vi(m)中打开所有当前的缓冲区并在新标签页中显示。 我知道可以编辑vimrc文件来实现这样的功能,但我更愿意只在需要时运行命令。 我可以手动使用新建选项卡和打开缓冲区命令来完成:

:tabnew | b 1

但我更喜欢一种更自动化的方法。

3个回答

62

最好的方法是:

:tab sball

从帮助中可以了解到:

"sball:重新排列屏幕,为缓冲区列表中的每个缓冲区打开一个窗口...当使用 |:tab| 修饰符时,会在新标签页中打开新的窗口,最多达到 'tabpagemax'。"

如果没有使用 |:tab| 修饰符,则会在分割视图中打开每个缓冲区。

:sball

或者最多打开其中的6个

:6sball

等等。


1
不要忘记那个听起来有点像运动的“垂直球”,可以沿着y轴分裂。 - user755921
由于某种原因,:tab sball 命令也将当前标签页分成了5个不同的水平分割。很奇怪... - sixtyfootersdude
@sixtyfootersdude 你可能有某种插件干扰了(或者在执行 :tab 命令之前已经将窗口分割了(这可能发生在脚本/命令行中)。 - sehe

38

你可以将一个映射分配给这个命令:

:bufdo tab split
  • 说明:
    • bufdo [command] 将 [command] 应用于所有缓冲区
    • tab split 使用当前缓冲区并将其打开到一个选项卡中

最后,将其映射:

map ,bt :bufdo tab split<CR>
问候

10

[我本来想在上面接受的答案上发表评论,但是我没有足够的声望点数。]

对于我而言,如果它们是以前从未查看过的缓冲区,则上面接受的答案会使新标签页没有语法突出显示。(要复现 - 选择一些 XML 文件,在 Windows 资源管理器中选择 "使用单个 Vim 进行编辑",然后从那里尝试它。) 我不知道为什么会这样,所以我的解决方案就是再次打开语法突出显示。

我也发现最后一个缓冲区会有两个选项卡,这让我很烦恼,所以我的解决方案是转到最后一个选项卡并将其关闭。

:bufdo tab split
:tablast
:tabclose
:syntax on

因此在映射中,

:map ,bt :bufdo tab split<CR>:tablast<CR>:tabclose<CR>:syntax on<CR>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接