Advertisement
TankorSmash

Untitled

Mar 28th, 2013
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VIM 1.78 KB | None | 0 0
  1. "here is a more exotic version of my original Kwbd script
  2. "delete the buffer; keep windows; create a scratch buffer if no buffers left
  3. function s:Kwbd(kwbdStage)
  4.   if(a:kwbdStage == 1)
  5.     if(!buflisted(winbufnr(0)))
  6.       bd!
  7.       return
  8.     endif
  9.     let s:kwbdBufNum = bufnr("%")
  10.     let s:kwbdWinNum = winnr()
  11.     windo call s:Kwbd(2)
  12.     execute s:kwbdWinNum . 'wincmd w'
  13.     let s:buflistedLeft = 0
  14.     let s:bufFinalJump = 0
  15.     let l:nBufs = bufnr("$")
  16.     let l:i = 1
  17.     while(l:i <= l:nBufs)
  18.       if(l:i != s:kwbdBufNum)
  19.         if(buflisted(l:i))
  20.           let s:buflistedLeft = s:buflistedLeft + 1
  21.         else
  22.           if(bufexists(l:i) && !strlen(bufname(l:i)) && !s:bufFinalJump)
  23.             let s:bufFinalJump = l:i
  24.           endif
  25.         endif
  26.       endif
  27.       let l:i = l:i + 1
  28.     endwhile
  29.     if(!s:buflistedLeft)
  30.       if(s:bufFinalJump)
  31.         windo if(buflisted(winbufnr(0))) | execute "b! " . s:bufFinalJump | endif
  32.       else
  33.         enew
  34.         let l:newBuf = bufnr("%")
  35.         windo if(buflisted(winbufnr(0))) | execute "b! " . l:newBuf | endif
  36.       endif
  37.       execute s:kwbdWinNum . 'wincmd w'
  38.     endif
  39.     if(buflisted(s:kwbdBufNum) || s:kwbdBufNum == bufnr("%"))
  40.       execute "bd! " . s:kwbdBufNum
  41.     endif
  42.     if(!s:buflistedLeft)
  43.       set buflisted
  44.       set bufhidden=delete
  45.       set buftype=
  46.       setlocal noswapfile
  47.     endif
  48.   else
  49.     if(bufnr("%") == s:kwbdBufNum)
  50.       let prevbufvar = bufnr("#")
  51.       if(prevbufvar > 0 && buflisted(prevbufvar) && prevbufvar != s:kwbdBufNum)
  52.         b #
  53.       else
  54.         bn
  55.       endif
  56.     endif
  57.   endif
  58. endfunction
  59.  
  60. command! Kwbd call s:Kwbd(1)
  61. nnoremap <silent> <Plug>Kwbd :<C-u>Kwbd<CR>
  62.  
  63. " Create a mapping (e.g. in your .vimrc) like this:
  64. nmap <f2> <Plug>Kwbd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement