重置Vim中的缓冲区

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 自动将备用缓冲区重置回上一次的状态?有一个备用缓冲区的“历史记录”吗?

或者我只能使用 :2 b 命令重新加载 other.c 到备用缓冲区吗?

或者这种行为背后可能有一个很好的原因吗?


1
我没有答案给你,但我不知道ctrl-^。生产力++,谢谢! - Logan
2个回答

7
在这种情况下,“alternate”只是指“以前的”。因此,是的,:b2(或2 ctrl-6)可能是更改由ctrl-6切换的两个缓冲区最简单的方法。
另外,请查看:keepalt命令。

2
正如你所期望的那样,在Vim中,这种行为有一个很好的原因。`:bd`(缓冲区删除的助记符)并不是真正删除缓冲区,而是将其从主缓冲区列表中删除!
如果你尝试使用 `:ls!` 或 `:buffers!`,你会发现它仍然可用,但在它的缓冲区编号旁边有一个 `u`,表示它现在是“未列出的”(也就是说,除非你使用感叹号列出它!)。
我让它听起来尽可能糟糕,但像大多数Vim一样,一旦你理解了它,强制执行命令的感叹号/惊叹号的使用是一致的。
要完全摆脱缓冲区,你需要使用 `:bw` 将其清除。当你这样做时,你仍然会遇到相同的问题,但这次,尝试使用 `CTRL-^` 切换到备用缓冲区将引发“没有备用文件”的提示(因为这一次它确实已经消失了)。
要切换到你想要的文件,是的,使用缓冲区编号:`:b2`,或者你想要的文件的缓冲区编号,这将建立一个新的备用缓冲区。
我觉得很容易记住缓冲区编号,或者使用 `:buffers` 或 `:buffers!` 快速查找它们,当然,切换到它们也很快,但当然,在Vim中有一系列的技巧可以用来更改缓冲区,特别是包括标记。
你还发现了Vim的另一个伟大功能,未列出的缓冲区。当你处理一些额外的文件时,使用 `:bd` 将它们从 `:buffers` 列表中“删除”,有时会很有帮助,这样它们就不会在视线中,但虽然隐藏了,它们并不是不可用的,你可以使用 `:buffers!` 检查你想要的文件,然后使用 `:b` 将其拉起,而无需取消删除或其他任何操作。

1
很高兴看到你还在,@RobWells!我想你现在已经知道了这个问题的答案,考虑到你使用Vim的时间有多长! - NeilG

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