在不退出Vim的情况下关闭和卸载缓冲区


54

通常,我会将一些信息加载到临时缓冲区中,然后使用来关闭它:clo!。但这隐藏了缓冲区,而不是完全卸载它,即使我已经nohidden设置了。我觉得这很烦,因为我退出Vim时会得到关于我已经(认为我)已经丢弃的内容的额外确认。

我可以:q!改用它,但这是个坏习惯,因为如果只剩下一个缓冲区,它将完全退出Vim,这也很烦人。更糟糕的是,如果输入错误:qa!,我可能会失去很多工作。

有中间立场吗?我真的很想命令杀死当前缓冲区,但不退出Vim。我不反对用Vimscript编写它,但是如果命令已经存在,我宁愿避免使用它。

Answers:


69

有命令可以做到这一点::bdelete:bd。默认情况下,它将卸载当前缓冲区。要卸载其他缓冲区,请首先使用:buffers命令获取所有缓冲区的列表,然后您可以指定后面:bd要删除的编号。此外:bd+ space+ tab允许使用缓冲区名完成。


1
这将在最后开放的缓冲,这是不工作正是我想要的,但由于它不退出,这是我的目的不够好。
凯文

vim-bbye插件可能就是您要寻找的东西:github.com/moll/vim-bbye
alxndr 2015年

1
这并不在工作
散发出浓烈的

此外,内置别名:ls更易于记忆(imo),其作用与:buffers
kuzyn

这不会卸载缓冲区。实际上,它甚至都没有关闭它。它只是取消了“ buflisted”。 vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

您可以使用:bwipeout(或:bw)命令完全清除缓冲区。这会从内存中完全删除缓冲区,包括您添加到缓冲区中的所有标记,选项设置等。同样,:bdelete(或:bd)删除缓冲区,但将其保留在内存中并保留标记和选项设置。

根据Tom Hale的评论,除非您知道自己在做什么,否则Vim文档建议使用:bd而不是:bw。我倾向于使用:bw,因为就像从内存中完全删除缓冲区的想法一样,并且我并没有过多地使用标记,特定于缓冲区的选项设置等,以至于在关闭缓冲区后仍需要保留它们。

与:quit(:q)命令一样,如果缓冲区已更改,Vim也会给出错误消息。要解决此问题,您可以在命令后附加一个感叹号以禁止显示提示。除了向所有内容添加感叹号之外,另一种方法是在vimrc中添加“设置确认”。有了这个设置,vim会提示您关闭时保存文件更改。

:bufdo是一个有用的命令,它对所有活动缓冲区执行另一个命令。将:bufdo命令与:bw /:bd命令结合使用,可以一次删除所有活动缓冲区。您仍然可以使用感叹号来抑制错误,但是无论将其放在:bufdo之后,:bw之后还是两者之后,都会导致每个结果不同:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

以下是一些其他有用的缓冲区命令:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

还有更多的缓冲区处理超出了这个问题的范围。看看:
http : //vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


您能为这个答案添加一些解释吗?
EvergreenTree

帮助说:“除非您知道自己在做什么,否则不要使用它”,这表示:bd在大多数情况下是首选
Tom Hale

1
@TomHale很高兴知道:bw除了“与缓冲区有关的所有内容均丢失。该缓冲区中的所有标记均无效,选项设置丢失等”之外的其他功能。如果我要“关闭”缓冲区,就像我完全退出Vim一样,这对我来说似乎是完全合理的。
肯尼·埃维特

我更喜欢:bw而不是:bd,因为如果使用:bd然后按<ctrl-^>转到上一个使用的缓冲区,它将从内存中调出它。:bw给了我更多控制权,做了我想做的事^^
eli

这很棒!谢谢@ Soylent17!
阿波罗
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.