如何在不关闭窗口的情况下关闭缓冲区?


23

我通常会打开一些窗口并保持一些缓冲区打开。由于我在缓冲区探索中的MO是使用对:bn和的快速快捷方式:bp,因此我想关闭不需要的缓冲区,以免分散我的缓冲区浏览速度。

但是,如果我有多个打开的窗口,那么麻烦就是发出:bd:bw导致关闭窗口。如何关闭(删除)缓冲区并使窗口完好无损?

受@peth的答案启发的解决方案

:command! BW :bn|:bd#

很简单。仅打开一个缓冲区并不能很好地工作(根据打开文件的方式,我会得到不同的行为),但这不是一个大问题。:)

Answers:


12

可能会很痛苦,这个问题也在#vim(Freenode)上一遍又一遍地提出。

有人建议不要删除缓冲区并使用:b partial<Tab>而不是进行切换:bn,它可以工作,但不是您要的。

我所知道的最好的方法就是先切换到另一个缓冲区,然后再切换到:bd#您可以映射的缓冲区。

另请参见在Vim wikia上删除缓冲区而不关闭窗口


如果没有正式的方法,该脚本看起来是我愿意接受的解决方案。:)
unperson325680 2011年

21

我对此有些困惑,最后想到了:

:bp | sp | bn | bd

这是键映射的复制/粘贴版本:

:bp<bar>sp<bar>bn<bar>bd<CR>

或.vimrc的命令(用:Bd调用):

命令Bd bp | sp | bn | d

我已经对其进行了相当多的测试,并且可以在各种条件下始终如一地工作。在最后一个缓冲区上使用时,它将为您留出新的空白缓冲区。


3
如果关闭两个窗口中都打开的缓冲区(例如最后一个缓冲区),则会丢失拆分。+1表示比Wikia脚本更简单,而不关闭窗口
雷夫·卡尔森

我使用的是vim-bbye,但是您的答案要简单得多,并且不依赖任何脚本。谢谢。
安德鲁-杜夫雷斯涅

4

窗口是进入缓冲区的视口。(请参阅参考资料:help window。)没有关联的缓冲区,就不会有一个窗口。但是,您可以使用诸如:enew用空缓冲区替换当前窗口内容的命令。


我原以为删除缓冲区后,vim可以切换到另一个缓冲区,或者在必要时打开一个新缓冲区。
unperson325680 2011年

@progo,这需要一些脚本,即插件或简单的映射。
克林特·帕奇


2

这是另一个解决方案:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

键入Ctrl + W,然后o将安静地创建一个新窗口并关闭旧窗口。光标留在新窗口中。有许多积极影响:

  1. 您的原始拆分尺寸将保留。
  2. 空缓冲区被加载到新的拆分中。
  3. 原始缓冲区仍在加载,请使用:buffers列出它。
  4. 如果需要返回,请按Ctrl + o将光标移到旧缓冲区中的原始位置。
  5. 即使只加载一个窗口,效果也很好。

1

我认为问题在于大多数人期望vim缓冲区和窗口不是他们所需要的东西。

人们倾向于将vim窗口视为具有自己的缓冲区列表的独立进程,但遗憾的是事实并非如此。vim窗口只是其缓冲区的视口。
因此,会出现很多问题,例如您的问题,或者不同的窗口共享相同的缓冲区列表的问题,因此您无法在窗口A中编辑缓冲区1,而让窗口B忽略其缓冲区列表中的缓冲区1。

我的解决方案是打开两个vim实例,以便您可以拥有所需的vim窗口。在平铺WM上效果最好。


1

通常我只是在任何缓冲区上打开菜单。这将打开左侧窗格上的菜单,并且光标将在此处激活。因此,我只是切换回活动缓冲区并删除该缓冲区。

之后,我可以从菜单中打开其他文件。

我的步骤是:

:Vex

ctrl + w + w

:bd
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.