How to close buffer without closing the window?
I usually open a few windows and keep some buffers open. Since my MO in buffer exploring is to use quick shortcuts to :bn
and :bp
, I want to close unneeded buffers from distracting my buffer surfing.
But the pain is, issuing :bd
and :bw
results in closing the window as well, in case I have multiple ones open. How do I close (delete) a buffer and leave the windows intact?
Solution inspired by @peth's answer
:command! BW :bn|:bd#
It is simple. Doesn't work well with only one buffer open (I get different behaviour depending on the way I open the files) but it isn't a big issue. :)
Solution 1:
It can be a pain, this question is raised over and over on #vim
(Freenode), too.
Some people recommend not deleting buffers and switching with :b partial<Tab>
instead of :bn
, which works, but isn't what you're asking.
The best way I know of to do that is to switch to another buffer and then :bd#
, which you could map, of course.
See also Deleting a buffer without closing the window on the Vim wikia.
Solution 2:
I messed with this a bit and finally came up with:
:bp | sp | bn | bd
Here's the copy/paste version for key mapping:
:bp<bar>sp<bar>bn<bar>bd<CR>
Or a command for your .vimrc (call with :Bd):
command Bd bp | sp | bn | bd
I've tested it a fair bit and it works consistently in various conditions. When used on the last buffer it will leave you with a new blank buffer.
Solution 3:
A window is a viewport into a buffer. (See :help window
.) You can't have a window without an associated buffer. You can use a command such as :enew
to replace the current window contents with an empty buffer, though.
Solution 4:
the bufkill.vim plugin works as well. I like to use it with vim-command-w for added functionality and niceties (like it will close a split if it's the last buffer or close vim if it's the last buffer/split).
Solution 5:
Here's another solution:
map <C-W>o <C-W>n<C-W><C-W><C-W>c
Typing Ctrl+W then o will quietly create a new window and close the old window. The cursor is left in the new window. There are a number of positive effects:
- Your original split dimensions are preserved.
- An empty buffer is loaded in the new split.
- The original buffer is still loaded, use :buffers to list it.
- Ctrl+o moves the cursor to its original position in the old buffer should you need to go back.
- Works well even if only one window loaded.