" BufOnly.vim - Delete all the buffers except the current/named buffer. " " Copyright November 2003 by Christian J. Robinson " " Distributed under the terms of the Vim license. See ":help license". " " Usage: " " :Bonly / :BOnly / :Bufonly / :BufOnly [buffer] " " Without any arguments the current buffer is kept. With an argument the " buffer name/number supplied is kept. command! -nargs=? -complete=buffer -bang Bonly \ :call BufOnly('', '') command! -nargs=? -complete=buffer -bang BOnly \ :call BufOnly('', '') command! -nargs=? -complete=buffer -bang Bufonly \ :call BufOnly('', '') command! -nargs=? -complete=buffer -bang BufOnly \ :call BufOnly('', '') function! BufOnly(buffer, bang) if a:buffer == '' " No buffer provided, use the current buffer. let buffer = bufnr('%') elseif (a:buffer + 0) > 0 " A buffer number was provided. let buffer = bufnr(a:buffer + 0) else " A buffer name was provided. let buffer = bufnr(a:buffer) endif if buffer == -1 echohl ErrorMsg echomsg "No matching buffer for" a:buffer echohl None return endif let last_buffer = bufnr('$') let delete_count = 0 let n = 1 while n <= last_buffer if n != buffer && buflisted(n) if a:bang == '' && getbufvar(n, '&modified') echohl ErrorMsg echomsg 'No write since last change for buffer' \ n '(add ! to override)' echohl None else silent exe 'bdel' . a:bang . ' ' . n if ! buflisted(n) let delete_count = delete_count+1 endif endif endif let n = n+1 endwhile if delete_count == 1 echomsg delete_count "buffer deleted" elseif delete_count > 1 echomsg delete_count "buffers deleted" endif endfunction