From 2fb10dd2a6a91c3c46a7eda1311eed49af5cb332 Mon Sep 17 00:00:00 2001 From: Wenley Tong <wenley@squareup.com> Date: Fri, 28 Jun 2013 14:52:28 -0700 Subject: [PATCH 1/2] Added the better Bclose - close buffers while preserving windows --- vim/plugin/bclose.vim | 61 +++++++++++++++++++++++++++++++++++++++++++ vimrc | 1 + 2 files changed, 62 insertions(+) create mode 100644 vim/plugin/bclose.vim diff --git a/vim/plugin/bclose.vim b/vim/plugin/bclose.vim new file mode 100644 index 0000000..29637b6 --- /dev/null +++ b/vim/plugin/bclose.vim @@ -0,0 +1,61 @@ +"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= + 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 s:Kwbd(1) +nnoremap <silent> <Plug>Kwbd :<C-u>Kwbd<CR> diff --git a/vimrc b/vimrc index ca8a696..5e3143d 100644 --- a/vimrc +++ b/vimrc @@ -50,6 +50,7 @@ nmap <leader>T :CommandTFlush<CR>:CommandT<CR> nmap <leader>] :TagbarToggle<CR> nmap <leader><space> :call whitespace#strip_trailing()<CR> nmap <leader>g :ToggleGitGutter<CR> +nmap <leader>c <Plug>Kwbd " plugin settings let g:CommandTMaxHeight=20 -- GitLab From 229a6b35cff10adc9edcc5da4e0e0240127b7aa1 Mon Sep 17 00:00:00 2001 From: Wenley Tong <wenley.tong@gmail.com> Date: Sun, 28 Jul 2013 00:23:02 -0700 Subject: [PATCH 2/2] Changed plugin to submodule --- .gitmodules | 3 +++ vim/bundle/kwbd | 1 + vim/plugin/bclose.vim | 61 ------------------------------------------- 3 files changed, 4 insertions(+), 61 deletions(-) create mode 160000 vim/bundle/kwbd delete mode 100644 vim/plugin/bclose.vim diff --git a/.gitmodules b/.gitmodules index 6e010cb..886fcc2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -94,3 +94,6 @@ [submodule "vim/bundle/matchit"] path = vim/bundle/matchit url = https://github.com/vim-scripts/matchit.zip.git +[submodule "vim/bundle/kwbd"] + path = vim/bundle/kwbd + url = git@github.com:vim-scripts/kwbdi.vim.git diff --git a/vim/bundle/kwbd b/vim/bundle/kwbd new file mode 160000 index 0000000..1fd0382 --- /dev/null +++ b/vim/bundle/kwbd @@ -0,0 +1 @@ +Subproject commit 1fd0382dd299b9feb343b7960f6977de402b0929 diff --git a/vim/plugin/bclose.vim b/vim/plugin/bclose.vim deleted file mode 100644 index 29637b6..0000000 --- a/vim/plugin/bclose.vim +++ /dev/null @@ -1,61 +0,0 @@ -"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= - 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 s:Kwbd(1) -nnoremap <silent> <Plug>Kwbd :<C-u>Kwbd<CR> -- GitLab