如何在 vim 的新选项卡中编辑现有缓冲区?

inn*_*naM 60 vim tabs

假设我已经像这样启动了 vim:

vim foo bar
Run Code Online (Sandbox Code Playgroud)

现在我决定将这些文件中的每一个都放在自己的选项卡中。有没有办法在不退出 vim 并将-p选项添加到我的命令行的情况下做到这一点?

Roo*_*ook 56

您想在新选项卡中打开缓冲区吗?

拆分屏幕 (Ctrl-W s),占据一个窗口,然后 Ctrl-W T


Dav*_*llo 34

当您像这样启动 vim 时,您没有获得 vim 客户端,文本编辑器正在使用终端或 cmd 提示符 - 这两个文件位于两个不同的缓冲区中。使用:ls列出缓冲区:

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0
Run Code Online (Sandbox Code Playgroud)

%a 是活动缓冲区。您可以使用:b2切换到缓冲区 2 或使用:bn循环到下一个或:bp前一个。我更喜欢 (CTRL-W v) 垂直拆分窗口,而不是 (CTRL-W s) 水平拆分。

如果您加载了 2 个文件并且没有选项卡(还),则可以,:tabnew并且在新选项卡类型中:b2

如果您希望始终将缓冲区加载到它们自己的选项卡中,请查看这篇文章


rkj*_*nsn 34

您可以通过将tab命令与sb[uffer]命令组合来完成此操作。

首先,您需要知道要在新选项卡中打开的缓冲区的缓冲区 ID。您可以使用以下ls命令找到它:

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0
Run Code Online (Sandbox Code Playgroud)

获得 ID 后,您可以使用以下命令在新选项卡中轻松打开它:

:tab sb 2
Run Code Online (Sandbox Code Playgroud)

sb命令通常在新的拆分窗口中打开给定的缓冲区,但该tab命令会导致它在新选项卡中打开。

tab命令还允许您指定应在选项卡列表中创建新选项卡的位置。例如,:0tab sb 2将导致新的“栏”选项卡出现在列表的开头而不是当前选项卡之后。

  • 您不需要缓冲区编号,给它一个明确的缓冲区名称部分,VIM 会为您完成其余的工作。 (4认同)

Joh*_*ley 26

完成 OP 要求的更好方法是:

:bufdo tab split

这会将每个缓冲区打开到它自己的一个选项卡中,无论有多少。如果你使用这么多,很容易在你的 .vimrc 中制作一个映射。结合类似这个小 vim 插件的东西,以下内容将在它自己的选项卡中打开:grep(或:Ack)中的每个项目:

:grep foo
:QuickFixOpenAll
:bufdo tab split
Run Code Online (Sandbox Code Playgroud)

当然,当使用插件时,修改它以将快速修复列表内容直接打开到选项卡中是很容易的。

更新:我真的必须对下面 ggustafsson 的评论大喊大叫。它无疑是最好的答案,并且精美地说明了 Vim 对组合行为的倾向。建议是:

 :tab sball
Run Code Online (Sandbox Code Playgroud)

非常值得查找:tab:sball的 Vim 帮助,看看这里发生了什么。

  • `:tab sball` 似乎效果更好。 (14认同)

Sha*_*oke 6

1.在 Vim 中打开两个文件。

$ vim foo 栏

2.检查缓冲区的数量。

:ls
  1%a "foo"
  2个“酒吧”

3.链接两个命令:tabnew打开一个新选项卡和b <buffer_number>在选项卡中加载所需的缓冲区。

:tabnew | 乙 2

  • 第 3 步的问题在于,它首先创建了一个带有空缓冲区的新选项卡,然后打开了缓冲区 2,从而导致缓冲区列表中出现了一个额外的无标题缓冲区。最好使用`:tab sb 2` (9认同)