在Vim中无法通过一个命令关闭多个缓冲区

70

我在Screen中使用Vim。我运行以下命令:

vim <bigFolder>

我卡住了,因为逐个关闭每个缓冲区没有意义。

:q

如何在Vim中通过一个命令关闭所有活动的缓冲区?


我甚至无法使用Ctrl-D命令关闭屏幕,因为我正在浏览文件夹。关闭Vim也没有帮助,因为我在Screen中,所有内容都保留了上一个会话的状态。 - Léo Léopold Hertz 준영
2
我认为你把缓冲区和窗口搞混了。:q或:quit命令会关闭当前窗口。使用:bd或:bdelete命令可以卸载缓冲区并将其从缓冲区列表中删除。sunaku的回答是到目前为止唯一正确的答案 :) - bryan
9个回答

82

:bufdo 命令允许您对所有缓冲区执行命令。在这种情况下,您希望运行 :bufdo bdelete 以一次性关闭所有打开的缓冲区。


3
由于bdelete接受一个范围,你也可以使用:1,9999bd进行操作,其中9999是一个足够大的数字,以涵盖所有可能存在的打开缓冲区编号。 - Yetanotherjosh

78

:qall:qa 命令将关闭所有窗口。


2
非常感谢!你救了我的一天。如果没有你的命令,我的终端将毫无用处。 - Léo Léopold Hertz 준영
2
qa是OP想要的,但当然它也会退出vim。对于gvim,当您想完全关闭所有内容但不失去gui窗口时,这通常是不可取的,因此最好使用以下技术之一关闭所有缓冲区而不退出。 - Yetanotherjosh

65

:%bd(删除)

我认为这就是你要求的内容。


你会如何将这个应用到一个缓冲区呢?:bd 可以吗? - Alexej Magura

16
:on

关闭除当前正在编辑的缓冲区以外的所有缓冲区(光标在此缓冲区内)。

:on!

这也会关闭修改过的缓冲区,但它们将变成隐藏的缓冲区。

:ls

will列出所有缓冲区及其状态(隐藏,...)。

一些帮助:

:h only
:h hidden-buffer
:h ls

谢谢你的回答!- 我看不出选项[!]和没有它之间有什么区别。所有我的缓冲区都被这两个命令隐藏了,即使是我保存的。你怎么看出区别来的? - Léo Léopold Hertz 준영
1
我从vim帮助文档中找到了这个内容,你说得对,我也看不出两者之间的区别。 - Oli
似乎手册中有错误。你知道Vim手册的勘误在哪里吗?我在谷歌上找不到它。 - Léo Léopold Hertz 준영
18
:on! 实际上关闭的是其他窗口,而不是缓冲区。 - kbaribeau
3
这种说法完全错误。缓冲区与窗口是两个截然不同的概念。 - rbellamy
1
是的,缓冲区被保留打开了。尝试下面答案中的 :%bd 命令,这对我有用! - Malte

12

:on 不会关闭任何缓冲区。

它只会关闭其他窗口。


6

这并不完全符合您的要求,但以下步骤可能会得到所需的结果:

  • 使当前标签成为唯一打开的标签 (:tabo)
  • 使标签中的窗口成为唯一打开的窗口 (:only)
  • 在打开的窗口中显示第一个缓冲区 (1 b)
  • 删除编号为2至2000的缓冲区 (2,2000bd)

    :tabo | :only | 1 b | 2,2000 bd

如果您打开了超过2000个缓冲区,请相应调整。

如果您只想删除所有缓冲区,则 1,2000bd 应该可以完成任务,但请注意,所有打开的标签和窗口将创建新的空缓冲区。


不错!我甚至不知道在vim命令模式下可以将命令串联起来。对此点赞。 - Jason Down
1
在这种情况下,它并不是真正的“管道”。 “bar”运算符只是让您在Vim中的单行中执行多个命令。[文档](http://vimdoc.sourceforge.net/htmldoc/cmdline.html#:\bar) - Justin Force

5
那并不能保存缓冲区。也许 :wqall! :xall! 更好一些。

1

如果你的VIM卡住了,你仍然可以从VIM外部把它杀掉。

  • 如果你能够使用CTRL+Z暂停VIM,则可以使用kill %vim来杀死它。
  • 如果你无法暂停VIM,你可以使用ps找到它的pid,然后将其杀死:
$ ps -f -C vim
UID        PID  PPID  C STIME TTY          TIME CMD
nfellman 27273  7473  0 Jun24 pts/15   00:00:00 /nfs/iil/home/nfellman/vim/bin/vim a.pl
nfellman 37213  23747 0 Jun23 pts/15   00:00:00 /nfs/iil/home/nfellman/vim/bin/vim b.pl

如果我想结束正在编辑a.pl 的 VIM,可以执行以下命令:

kill -9 27273

这应该可以在屏幕内正常工作


-3

:q!

对我总是有效。


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