From b6430263e4d4db00b49dfa0c89baf786dd48a45d Mon Sep 17 00:00:00 2001 From: Sebastian Burschel Date: Tue, 31 Aug 2021 10:34:44 +0200 Subject: [PATCH] New cool stuff added. --- dotfiles/.vimrc | 78 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/dotfiles/.vimrc b/dotfiles/.vimrc index 3195e65..dc8b5c3 100644 --- a/dotfiles/.vimrc +++ b/dotfiles/.vimrc @@ -31,7 +31,7 @@ Plug 'chauncey-garrett/vim-tasklist' Plug 'ctrlpvim/ctrlp.vim' " I need thsi for python -Plug 'davidhalter/jedi-vim' + Plug 'davidhalter/jedi-vim' " Linter and analyse tool Plug 'dense-analysis/ale' @@ -286,6 +286,7 @@ let g:airline#extensions#tabline#enabled = 1 " Show buffers as tabs let g:ale_linters = {'python': ['flake8', 'mypy', 'pylint', 'prospector']} let g:ale_fixers = {'python': ['isort', 'black'], \'json': ['fixjson'], + \'xml': ['xmllint'], \'java': ['uncrustify'], \'tex': ['latexindent']} @@ -345,6 +346,81 @@ set undofile " Set the character which is used as tab indent marker let g:indentLine_char = '┊' + +" In split views, delete a buffer but keep the window layout. +" Found it here: https://vim.fandom.com/wiki/Deleting_a_buffer_without_closing_the_window +"delete the buffer; keep windows; create a scratch buffer if no buffers left +function s:Kwbd(kwbdStage) + if(a:kwbdStage == 1) + if(&modified) + let answer = confirm("This buffer has been modified. Are you sure you want to delete it?", "&Yes\n&No", 2) + if(answer != 1) + return + endif + endif + 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 Kwbd :Kwbd + +" Create a mapping (e.g. in your .vimrc) like this: +"nmap ! Kwbd +nmap d Kwbd + + " Load local config if there is one if filereadable($HOME . "/.vimrc.local") source ~/.vimrc.local