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


70

我在屏幕上使用Vim。我运行命令

vim <bigFolder>

我陷入困境,因为通过以下方法关闭每个缓冲区没有意义

:q

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


由于我正在浏览文件夹,因此我什至不能使用Ctrl-D命令关闭屏幕。关闭Vim并没有帮助,因为我在屏幕上,所有内容均保留在上一个会话中。
莱奥波德·赫兹(LéoLéopoldHertz),2009年

2
我认为您已经将缓冲区与Windows混淆了。:q或:quit关闭当前窗口。使用:bd或:bdelete卸载缓冲区并将其从缓冲区列表中删除。sunaku的答案是到目前为止正确的唯一答案了:)
布莱恩

Answers:



82

:bufdo命令使您可以在所有缓冲区上执行命令。在这种情况下,您要运行一次:bufdo bdelete关闭所有打开的缓冲区。


3
由于bdelete接受范围,因此您也可以执行:1,9999bd,其中9999只是一个足够高的数字,可以合理地包含任何打开的缓冲区数字。
Yetanotherjosh 2013年


16
:on

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

:on!

也将关闭修改后的缓冲区,但这些将变为隐藏缓冲区。

:ls

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

一些帮助:

:h only
:h hidden-buffer
:h ls

谢谢您的回答!--我看不到选项[!]与没有选项之间的区别。我所有的缓冲区都被这两个命令隐藏了,即使是我保存的也是如此。您如何看待差异?
莱奥波德·赫兹(LéoLéopoldHertz),2009年

1
我是从vim帮助中获取的,您是对的,我看不到两者之间的区别。
奥利

18
:上!实际上关闭其他窗口,而不是缓冲区。
kbaribeau

3
这是完全错误的。缓冲液是与窗户截然不同的动物。
rbellamy

1
是的,缓冲区保持打开状态。从下面的答案中尝试:%bd,这对我有用!
马尔特

12

:on 不关闭任何缓冲区。

它仅关闭其他窗口。


6

这并非您所要求的,但是以下内容可能会提供理想的结果。它:

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

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

如果打开的缓冲区超过2000个,请进行相应的调整。

您只需删除所有缓冲区,即可1,2000bd完成此工作,但请注意,将为所有打开的选项卡和窗口创建新的空缓冲区。


真好!我什至不知道您可以在vim命令模式下将命令通过管道传输在一起。+1。
杰森·唐

1
在这种情况下,它并不是真正的“管道”。“ bar”运算符仅允许您在Vim中的一行中执行多个命令。doc
Justin Force


1

如果碰巧使VIM完全卡住,您仍然应该可以从VIM外部将其杀死。

  • 如果您可以使用CTRL + Z挂起VIM,则可以使用 kill %vim
  • 如果您无法挂起VIM,则应该可以使用找到其pid ps。你可以杀死它:
$ 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

因此,如果我想终止正在编辑的VIM,a.pl可以执行以下操作:

kill -9 27273

即使在屏幕内也可以使用


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.