4

是否可以将 vim 会话中的备用缓冲区重置为以前的缓冲区?

备用缓冲区是指# 所指的缓冲区,即输入cntl-^ 时显示的缓冲区。

假设我打开了两个文件 main.c 和 other.c 并且 :ls 给了我:

  1 %a   "main.c"              lines 27
  2 #    "other.c"             lines 56

假设我打开另一个文件,例如refer.c, :ls 现在会给我:

  1 %a   "main.c"              lines 27
  2      "other.c"             lines 56
  3 #    "refer.c"             lines 125

如果我删除包含 refer.c 的缓冲区, :ls 现在会显示:

  1 %a   "main.c"              lines 27
  2      "other.c"             lines 56

但是如果我做一个cntl-^,refer.c会再次显示!

有没有办法让 vim 将备用缓冲区自动重置回上次的状态?备用缓冲区的“历史”?

还是我坚持做 a :2 b 将 other.c 重新加载到备用缓冲区?

或者也许这种行为有充分的理由?

4

2 回答 2

7

在这种情况下,“alternate”只是意味着“previous”。所以,是的,:b2(或 2 ctrl-6)可能是更改哪两个缓冲区将由 ctrl-6 切换的最简单方法。

另外,看看 :keepalt 命令。

于 2008-10-01T18:43:17.773 回答
2

正如您对 Vim 所期望的那样,这种行为是有充分理由的。:bd(缓冲区删除的助记符)不会删除缓冲区,它本身会从主缓冲区列表中删除它

如果您尝试:ls!,否则:buffers!您将看到它仍然可用,但与u它的缓冲区号相邻,表示它现在是“未列出的”(即,除非您用感叹号列出它,否则它是未列出的!)。

我让它听起来尽可能可怕,但与大多数 Vim 一样,一旦你理解它就可以工作,并且使用感叹号/砰来强制命令是一致的。

要完全摆脱缓冲区,您需要使用:bw. 当你这样做了,你仍然会遇到同样的问题,但是这一次,尝试切换到备用缓冲区CTRL-^将会引发No alternate file(因为这次它真的已经消失了)。

要切换到您想要的文件,是的,使用缓冲区号::b2,或者您想要的文件的任何缓冲区号,这将建立一个新的备用缓冲区。

我发现记住缓冲区编号或查找它们很容易,:buffers或者:buffers!非常快速,当然更改为它们很快,但当然 Vim 中有一系列技术可以更改缓冲区,尤其是标记

您还在这里发现了另一个很棒的 Vim 特性,未列出的缓冲区。当您处理一些额外的文件时,有时使用 将它们从:buffers列表中“删除”会很有帮助:bd,只是为了让它们看不见,但是虽然隐藏它们不可用,您可以检查您想要的文件:buffers!和然后:b<num>将其拉起,而无需取消删除它或其他任何东西。

于 2020-03-18T00:56:41.330 回答