Vim:删除缓冲区而不会丢失分割窗口


149

当删除缓冲区时(“ bd [elete]”命令),它不仅删除缓冲区,还删除缓冲区所在的拆分窗口。

有没有一种方法可以删除/卸载缓冲区并使窗口保持拆分状态?



对我来说很好。
Rumple Stiltskin '12

[这DeleteCurBufferNotCloseWindow()很好用,而且可读性强](stackoverflow.com/a/44950143/3625404)。
qeatzy

Answers:



326

bp|bd # 会做的。


详细信息:(bp“缓冲区上一个”)将我们移至当前窗口中的另一个缓冲区(bn也可以使用),然后bd #(“缓冲区删除”“替代文件”)删除我们刚刚移开的缓冲区。请参阅:help bphelp bdhelp alternate-file


71
您不知道我一直在寻找这样简单的东西多久了,不需要整个脚本来运行它。在我的VIMRC中,我现在已将此映射为CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Cloud

11
我正在尝试使用重新映射nmap <silent> <leader>d :bp|bd #<CR>,但是正在获取E94: No matching buffer for #<CR>
法比奥·佩雷斯

22
|(例如:bp\|bd
Mud 2013年

4
我知道我不必为此安装插件。谢谢!
阿卡什·阿格罗瓦尔

2
b#|bd #将切换到上一个使用的缓冲区,而不是下一个/上一个。但是,如果有的话,它将跳到隐藏的缓冲区set hidden,所以我做了一个更智能的BD函数来避免这种情况。
2014年

15

您可以在下面添加到您的.vimrcBd工作的bd,但没有触及窗口拆分:

command Bd bp\|bd \#

我发现这是对Mud回答的有用补充


这正是我的.vimrc文件中的文件。:)
泥2015年

您可以添加3条命令来卸载,删除和清除缓冲区:命令!BUN bp \ | bun \#命令!BD bp \ | bd \#命令!BW bp \ | bw \#等同于bufkill提供的内容,但在vimrc中有3行而不是700+行的插件!
fievel

3
对我来说,它仅在.vimrc中与此一起工作command! Bd bp|bd #。上面带有``的命令将缓冲区保留在缓冲区列表中。
mljrg


3

我执行与@Mud类似的操作,但切换到上一个视图缓冲区#,而不是缓冲区列表中的上一个缓冲区。这是我的绑定键.vimrc

nnoremap <silent> <leader>q :lclose<bar>b#<bar>bd #<CR>

关闭“位置”窗口(如果存在),切换到上一个视图缓冲区,然后关闭上一个切换的缓冲区。


1

我的选择是

:sb # | bd #
:sb 1 | bd #
: <1. Recall Buffer> | <2. Delete Buffer>

这样想!/// <1。召回缓冲区> | <2。删除缓冲区>

:vert sb 2 | bd #
:vert sb <tab key~completed file(buffer)name> | bd #

为什么?!很容易记住3(+1)个关键字!

  1. sb split_buffer
  2. bd删除缓冲区▶简单的2个关键字
  3. #或缓冲区数
  4. vert▶垂直的short_form(split_buffer或其他)

在许多其他情况下,这很容易而且非常有用!

祝你今天愉快!:)


0

我曾经用过:

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

但是我发现在某些情况下它关闭了我的窗户。最重要的是,下一个或上一个缓冲区可能不是您希望在拆分中显示的缓冲区。

现在我这样做:

  • 切换到我要处理的缓冲区
  • 删除备用缓冲区

nnoremap <leader>d :bd#<CR>

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.