bufonly.vim (2022B)
1 " BufOnly.vim - Delete all the buffers except the current/named buffer. 2 " 3 " 4 " Copyright November 2003 by Christian J. Robinson <infynity@onewest.net> 5 " 6 " Distributed under the terms of the Vim license. See ":help license". 7 " 8 " Usage: 9 " 10 " :Bonly / :BOnly / :Bufonly / :BufOnly [buffer] 11 " 12 " Without any arguments the current buffer is kept. With an argument the 13 " buffer name/number supplied is kept. 14 15 if exists('g:BufonlyLoaded') || &cp 16 finish 17 end 18 let g:BufonlyLoaded = 1 19 20 command! -nargs=? -complete=buffer -bang Bonly 21 \ :call BufOnly('<args>', '<bang>') 22 command! -nargs=? -complete=buffer -bang BOnly 23 \ :call BufOnly('<args>', '<bang>') 24 command! -nargs=? -complete=buffer -bang Bufonly 25 \ :call BufOnly('<args>', '<bang>') 26 command! -nargs=? -complete=buffer -bang BufOnly 27 \ :call BufOnly('<args>', '<bang>') 28 29 function! BufOnly(buffer, bang) 30 if a:buffer == '' 31 " No buffer provided, use the current buffer. 32 let buffer = bufnr('%') 33 elseif (a:buffer + 0) > 0 34 " A buffer number was provided. 35 let buffer = bufnr(a:buffer + 0) 36 else 37 " A buffer name was provided. 38 let buffer = bufnr(a:buffer) 39 endif 40 41 if buffer == -1 42 echohl ErrorMsg 43 echomsg "No matching buffer for" a:buffer 44 echohl None 45 return 46 endif 47 48 let last_buffer = bufnr('$') 49 50 let delete_count = 0 51 let n = 1 52 while n <= last_buffer 53 if n != buffer && buflisted(n) 54 if a:bang == '' && getbufvar(n, '&modified') 55 echohl ErrorMsg 56 echomsg 'No write since last change for buffer' 57 \ n '(add ! to override)' 58 echohl None 59 else 60 silent exe 'bdel' . a:bang . ' ' . n 61 if ! buflisted(n) 62 let delete_count = delete_count+1 63 endif 64 endif 65 endif 66 let n = n+1 67 endwhile 68 69 if delete_count == 1 70 echomsg delete_count "buffer deleted" 71 elseif delete_count > 1 72 echomsg delete_count "buffers deleted" 73 endif 74 75 endfunction 76 77 lua << EOF 78 vim.keymap.set('n', '<leader>bo', '<cmd>BufOnly<cr>', {desc = 'Buffer Only'}) 79 vim.keymap.set('n', '<leader>bO', '<cmd>BufOnly!<cr>', {desc = 'Buffer Force Only'}) 80 EOF