Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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

share|improve this question

6 Answers 6

up vote 4 down vote accepted

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.

share|improve this answer
    
The script looks a solution I'm willing to accept if there is not official way. :) –  progo May 27 '11 at 12:56

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.

share|improve this answer
1  
I lose my split if I close a buffer open in both windows, such as the last buffer. +1 for being simpler than the wikia scripts to bd without closing the window. –  Leif Carlsen Feb 3 '13 at 19:35

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.

share|improve this answer
    
I was expecting that after a buffer delete, vim could switch to another buffer, or open a new one if necessary. –  progo May 27 '11 at 7:06
    
@progo, that would require some scripting, i.e. plugin, or a simple mapping. –  Clint Pachl Sep 1 '11 at 6:51

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:

  1. Your original split dimensions are preserved.
  2. An empty buffer is loaded in the new split.
  3. The original buffer is still loaded, use :buffers to list it.
  4. Ctrl+o moves the cursor to its original position in the old buffer should you need to go back.
  5. Works well even if only one window loaded.
share|improve this answer

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).

share|improve this answer

I think the problem is that most people expect vim buffer and window to be something they aren't.

People tend to think of a vim window as a standalone process that has its own list of buffers, but sadly it isn't. A vim window is only a viewport of its buffers.
Therefore a lot of problems arise, like your problem, or the problem that different window share the same buffer list so you can't edit Buffer 1 in Window A, and let Window B ignore Buffer 1 in its buffer list.

My solution is to open two instances of vim, so that you can have the kind of vim window you want. It works best on tiling WMs.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.