diff options
author | bnewbold <bnewbold@robocracy.org> | 2010-04-23 01:17:01 -0400 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2010-04-23 01:17:01 -0400 |
commit | 5c4dfeb2e15fea395abda5027e92e2a013b1aaf0 (patch) | |
tree | d13d215392aad5b47a2e8616f6bf47e773956286 /.vim/plugin/kwbd.vim | |
parent | 0bf28391b00b1e28c44324bcd7647df416314667 (diff) | |
download | openwrt-repro-5c4dfeb2e15fea395abda5027e92e2a013b1aaf0.tar.gz openwrt-repro-5c4dfeb2e15fea395abda5027e92e2a013b1aaf0.zip |
new vim stuff
Diffstat (limited to '.vim/plugin/kwbd.vim')
-rw-r--r-- | .vim/plugin/kwbd.vim | 65 |
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 + |