summaryrefslogtreecommitdiffstats
path: root/.vim/plugin/kwbd.vim
diff options
context:
space:
mode:
authorbnewbold <bnewbold@robocracy.org>2010-04-23 01:17:01 -0400
committerbnewbold <bnewbold@robocracy.org>2010-04-23 01:17:01 -0400
commit5c4dfeb2e15fea395abda5027e92e2a013b1aaf0 (patch)
treed13d215392aad5b47a2e8616f6bf47e773956286 /.vim/plugin/kwbd.vim
parent0bf28391b00b1e28c44324bcd7647df416314667 (diff)
downloadopenwrt-repro-5c4dfeb2e15fea395abda5027e92e2a013b1aaf0.tar.gz
openwrt-repro-5c4dfeb2e15fea395abda5027e92e2a013b1aaf0.zip
new vim stuff
Diffstat (limited to '.vim/plugin/kwbd.vim')
-rw-r--r--.vim/plugin/kwbd.vim65
1 files changed, 65 insertions, 0 deletions
diff --git a/.vim/plugin/kwbd.vim b/.vim/plugin/kwbd.vim
new file mode 100644
index 0000000..bff8cdd
--- /dev/null
+++ b/.vim/plugin/kwbd.vim
@@ -0,0 +1,65 @@
+"here is a more exotic version of my original Kwbd script
+"delete the buffer; keep windows; create a scratch buffer if no buffers left
+function s:Kwbd(kwbdStage)
+ if(a:kwbdStage == 1)
+ if(!buflisted(winbufnr(0)))
+ bd!
+ return
+ endif
+ let s:kwbdBufNum = bufnr("%")
+ let s:kwbdWinNum = winnr()
+ windo call s:Kwbd(2)
+ execute s:kwbdWinNum . 'wincmd w'
+ let s:buflistedLeft = 0
+ let s:bufFinalJump = 0
+ let l:nBufs = bufnr("$")
+ let l:i = 1
+ while(l:i <= l:nBufs)
+ if(l:i != s:kwbdBufNum)
+ if(buflisted(l:i))
+ let s:buflistedLeft = s:buflistedLeft + 1
+ else
+ if(bufexists(l:i) && !strlen(bufname(l:i)) && !s:bufFinalJump)
+ let s:bufFinalJump = l:i
+ endif
+ endif
+ endif
+ let l:i = l:i + 1
+ endwhile
+ if(!s:buflistedLeft)
+ if(s:bufFinalJump)
+ windo if(buflisted(winbufnr(0))) | execute "b! " . s:bufFinalJump | endif
+ else
+ enew
+ let l:newBuf = bufnr("%")
+ windo if(buflisted(winbufnr(0))) | execute "b! " . l:newBuf | endif
+ endif
+ execute s:kwbdWinNum . 'wincmd w'
+ endif
+ if(buflisted(s:kwbdBufNum) || s:kwbdBufNum == bufnr("%"))
+ execute "bd! " . s:kwbdBufNum
+ endif
+ if(!s:buflistedLeft)
+ set buflisted
+ set bufhidden=delete
+ set buftype=nofile
+ setlocal noswapfile
+ endif
+ else
+ if(bufnr("%") == s:kwbdBufNum)
+ let prevbufvar = bufnr("#")
+ if(prevbufvar > 0 && buflisted(prevbufvar) && prevbufvar != s:kwbdBufNum)
+ b #
+ else
+ bn
+ endif
+ endif
+ endif
+endfunction
+
+command! Kwbd call <SID>Kwbd(1)
+nnoremap <silent> <Plug>Kwbd :<C-u>Kwbd<CR>
+
+" Create a mapping (e.g. in your .vimrc) like this:
+"nmap <C-W>! <Plug>Kwbd
+