在Vim中重置缓冲区

时间:2008-10-01 18:10:51

标签: vim buffer keyboard-shortcuts

是否可以将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将备用缓冲区重置为最后一次自动恢复?备用缓冲区的“历史”?

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

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

2 个答案:

答案 0 :(得分:7)

在这种情况下,“alternate”仅表示“previous”。所以,是的,:b2(或2 ctrl-6)可能是改变ctrl-6切换哪两个缓冲区的最简单方法。

另外,请看一下:keepalt命令。

答案 1 :(得分:1)

您将对Vim有所期待,这是一个很好的原因。 -i.bak(用于缓冲区删除的助记符)不会删除缓冲区,就其本身而言,它会从主缓冲区列表中删除

如果您尝试使用.bak:bd,则会看到它仍然可用,但其缓冲区编号旁边有一个:ls!,表示它现在是“未列出”(即,除非您使用感叹号将其列出!)

我正在使声音听起来越恐怖,但是就像大多数Vim一样,一旦您理解它就可以使用,并且使用感叹号/ bang强制执行命令是一致的。

要完全摆脱缓冲区,您需要使用:buffers! 擦除。完成此操作后,您仍然会遇到同样的问题,但是这次,尝试使用u切换到备用缓冲区会引起:bw(因为这次 really 已经消失了。)

是的,要切换到所需文件,请使用缓冲区号CTRL-^,或所需文件的任何缓冲区号,这将建立一个新的备用缓冲区。

我发现很容易记住缓冲区编号或非常快速地用No alternate file:b2查找缓冲区编号,当然,很快就可以更改它们,但是Vim中有很多技巧用于更改缓冲区,尤其是包括 mark 的缓冲区。

您还在这里发现了另一个很棒的Vim功能,即未列出的缓冲区。当您处理一些额外的文件时,使用:buffers:buffers!列表中“删除”它们有时会很有帮助,只是使它们不可见,但尽管隐藏了它们并非不可用,然后您可以先使用:buffers并选择:bd来将其拉出,而不必取消删除它或任何其他操作。