From 1fc320d032bbdb1a67c4412524cd4417c71b3bcb Mon Sep 17 00:00:00 2001 From: Oscar Wallberg Date: Sun, 7 Sep 2025 03:18:23 +0200 Subject: [PATCH] fix(vim): reorganize --- .vimrc | 286 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 145 insertions(+), 141 deletions(-) diff --git a/.vimrc b/.vimrc index 1efc069..043e576 100644 --- a/.vimrc +++ b/.vimrc @@ -77,9 +77,6 @@ set hidden set incsearch set jumpoptions=stack set signcolumn=yes -set statusline=\ %m\%= - \%-5.5{&filetype}\ %-6.6{&fileencoding}\ %-4.4{&fileformat} - \\ %4.4(%p%%%)%5.5l:%-3.3v syntax on filetype plugin indent on @@ -100,11 +97,6 @@ map dp :diffput map do :diffget xmap dp :diffput xmap do :diffget -nmap gd :Gdiffsplit -nmap gc :G commit -nmap ga :G commit --amend -nmap gp :G push -nmap gg :call ToggleGitStatus() nmap ]g (GitGutterNextHunk) nmap [g (GitGutterPrevHunk) map gs (GitGutterStageHunk) @@ -139,10 +131,6 @@ inoremap noremap :nohlsearch:diffupdate nmap tn :tabnew nmap tq :tabclose -nmap ff :Files -nmap fr :CwdHistory -nmap fb :Buffers -nmap fg :Rg "" nmap fe &filetype ==# 'netrw' ? ':Rex' : ':Ex' nmap q :bn \| bd# nmap tt :NERDTreeToggle \| wincmd p @@ -209,9 +197,44 @@ cnoreabbrev term terminal ++curwin command! W write -" {{{1 Plugins -" {{{2 Plugin variables +" {{{1 Statusline +function! StatusLine() abort + let git_status = '' + + if exists('g:loaded_gitgutter') + let [a,m,r] = GitGutterGetHunkSummary() + let parts = [] + let suffix = g:statusline_winid == win_getid(winnr()) ? '' : 'NC' + + if a > 0 + let parts += ['%#GitStatusAdd' . suffix . '#' . printf('+%d', a) . '%*'] + endif + + if m > 0 + let parts += ['%#GitStatusChange' . suffix . '#' . printf('~%d', m) . '%*'] + endif + + if r > 0 + let parts += ['%#GitStatusDelete' . suffix . '#' . printf('-%d', r) . '%*'] + endif + + if !empty(parts) + let git_status = ' ' . join(parts, ' ') + endif + endif + + return " %f%4( %m%) " + \ . git_status + \ . "%=" + \ . "%{&filetype} %-6.6{&fileencoding} %-4.4{&fileformat}" + \ . " %4.4(%p%%%)%6.6l:%-3.3v" +endfunction + +set statusline=%!StatusLine() + +" {{{1 Plugins +" {{{2 Variables " {{{3 GitGutter let g:gitgutter_sign_added = '┃' @@ -237,6 +260,7 @@ let g:NERDTreeMapActivateNode = "l" let g:NERDTreeMapCloseDir = "h" " {{{3 onedark + let g:onedark_color_overrides = { \ "background": {"gui": "#1f2329", "cterm": "235", "cterm16": "NONE" }, \ "cursor_grey": { "gui": "#282c34", "cterm": "236", "cterm16": "0" }, @@ -274,12 +298,14 @@ augroup colorextend augroup END " {{{3 Undotree + let g:undotree_WindowLayout = 2 let g:undotree_DiffCommand = "diff -u" let g:undotree_SplitWidth = 50 let g:undotree_DiffpanelHeight = 20 " {{{2 Install + let s:plug_file = expand('$HOME/.vim/autoload/plug.vim') if !filereadable(s:plug_file) silent execute '!curl -fkLo ' . s:plug_file ' --create-dirs' @@ -324,20 +350,90 @@ call plug#begin(s:plug_dir) " Disabling LSP stuff for now. call plug#end() -" {{{2 Colorscheme +" {{{2 Setup +" {{{3 Colorscheme silent! colorscheme onedark + +" {{{3 GitGutter -" {{{2 Fzf +function! s:SetupGitGutter() + if !exists('g:loaded_gitgutter') + return + endif -function! s:build_quickfix_list(lines) - echo "lines" - echo lines - call setqflist(map(copy(a:lines), '{ "filename": v:val, "lnum": 1 }')) - copen - cc + execute 'highlight default GitStatusAdd guifg=' + \ . synIDattr(synIDtrans(hlID('GitGutterAdd')), 'fg') + \ . ' guibg=' + \ . synIDattr(synIDtrans(hlID('StatusLine')), 'bg') + execute 'highlight GitStatusChange guifg=' + \ . synIDattr(synIDtrans(hlID('GitGutterChange')), 'fg') + \ . ' guibg=' + \ . synIDattr(synIDtrans(hlID('StatusLine')), 'bg') + execute 'highlight GitStatusDelete guifg=' + \ . synIDattr(synIDtrans(hlID('GitGutterDelete')), 'fg') + \ . ' guibg=' + \ . synIDattr(synIDtrans(hlID('StatusLine')), 'bg') + execute 'highlight default GitStatusAddNC guifg=' + \ . synIDattr(synIDtrans(hlID('GitGutterAdd')), 'fg') + \ . ' guibg=' + \ . synIDattr(synIDtrans(hlID('StatusLineNC')), 'bg') + execute 'highlight GitStatusChangeNC guifg=' + \ . synIDattr(synIDtrans(hlID('GitGutterChange')), 'fg') + \ . ' guibg=' + \ . synIDattr(synIDtrans(hlID('StatusLineNC')), 'bg') + execute 'highlight GitStatusDeleteNC guifg=' + \ . synIDattr(synIDtrans(hlID('GitGutterDelete')), 'fg') + \ . ' guibg=' + \ . synIDattr(synIDtrans(hlID('StatusLineNC')), 'bg') endfunction +autocmd VimEnter * call s:SetupGitGutter() + +" {{{3 Fugitive + +function! OpenGitStatus() + let l:previous_win = win_getid() + echo l:previous_win + leftabove vertical G + vertical resize 50 + setlocal winfixwidth + call win_gotoid(l:previous_win) +endfunction + +function! GetGitStatusWin() + let l:current_tabpage = tabpagenr() + for l:winnr in range(1, winnr('$')) + let l:bufnr = winbufnr(l:winnr) + let l:buftype = getbufvar(l:bufnr, '&buftype') + let l:bufname = bufname(l:bufnr) + if l:buftype ==# 'nowrite' && l:bufname =~# '^fugitive://.*\.git//$' + return l:winnr + endif + endfor + return 0 +endfunction + +function! ToggleGitStatus() + let l:win = GetGitStatusWin() + if l:win + execute l:win . 'wincmd c' + return + endif + + call OpenGitStatus() +endfunction + + +nmap gd :Gvdiffsplit +nmap gD :Gvdiffsplit HEAD +nmap gc :G commit +nmap ga :G commit --amend +nmap gp :G push +nmap gg :call ToggleGitStatus() + +" {{{3 Fzf + autocmd! FileType fzf tnoremap autocmd! FileType fzf tnoremap autocmd! FileType fzf tnoremap @@ -366,11 +462,33 @@ command! -bang CwdHistory call fzf#run(fzf#wrap({ \ ]}, \ 0)) -" {{{2 flog +nmap ff :Files +nmap fr :CwdHistory +nmap fb :Buffers +nmap fg :Rg "" + +" {{{3 NERDTree + +function! s:SetupNERDTree() + if !exists('g:loaded_nerd_tree') + return + endif + + " Exit Vim if NERDTree is the only window remaining in the only tab. + autocmd BufEnter * if tabpagenr('$') == 1 && + \ winnr('$') == 1 && + \ exists('b:NERDTree') && + \ b:NERDTree.isTabTree() | + \ quit | + \ endif +endfunction + +autocmd VimEnter * call s:SetupNERDTree() +" {{{3 flog nmap gl :Flog -" {{{2 vim-lsp +" {{{3 vim-lsp " let g:lsp_use_native_client = 1 " let g:lsp_semantic_enabled = 1 @@ -472,7 +590,7 @@ nmap gl :Flog " autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() " augroup END -" {{{2 CoC +" {{{3 CoC " inoremap " \ coc#pum#visible() ? coc#pum#next(1) : @@ -532,7 +650,7 @@ nmap gl :Flog " xmap la (coc-codeaction-selected) " nmap la (coc-codeaction-selected) -" {{{2 lsp +" {{{3 lsp " autocmd User LspSetup call LspOptionsSet(#{ " \ aleSupport: v:false, @@ -592,7 +710,7 @@ nmap gl :Flog " \ ] " \ }]) -" {{{2 ALE +" {{{3 ALE " let g:ale_linters_explicit = 1 " let g:ale_linters = #{ @@ -604,117 +722,3 @@ nmap gl :Flog " \ python: ['black', 'isort', 'remove_trailing_lines', 'trim_whitespace'], " \ } " let g:ale_python_black_options = '--line-length 80' - -" {{{1 Statusline - -function! StatusLine() abort - let [a,m,r] = GitGutterGetHunkSummary() - let parts = [] - let suffix = g:statusline_winid == win_getid(winnr()) ? '' : 'NC' - - if a > 0 - let parts += ['%#GitStatusAdd' . suffix . '#' . printf('+%d', a) . '%*'] - endif - - if m > 0 - let parts += ['%#GitStatusChange' . suffix . '#' . printf('~%d', m) . '%*'] - endif - - if r > 0 - let parts += ['%#GitStatusDelete' . suffix . '#' . printf('-%d', r) . '%*'] - endif - - let git_status = '' - - if !empty(parts) - let git_status = ' ' . join(parts, ' ') - endif - - return " %f%4( %m%) " - \ . git_status - \ . "%=" - \ . "%{&filetype} %-6.6{&fileencoding} %-4.4{&fileformat}" - \ . " %4.4(%p%%%)%6.6l:%-3.3v" -endfunction - -function! s:SetupGitGutter() - if !exists('g:loaded_gitgutter') - return - endif - - execute 'highlight default GitStatusAdd guifg=' - \ . synIDattr(synIDtrans(hlID('GitGutterAdd')), 'fg') - \ . ' guibg=' - \ . synIDattr(synIDtrans(hlID('StatusLine')), 'bg') - execute 'highlight GitStatusChange guifg=' - \ . synIDattr(synIDtrans(hlID('GitGutterChange')), 'fg') - \ . ' guibg=' - \ . synIDattr(synIDtrans(hlID('StatusLine')), 'bg') - execute 'highlight GitStatusDelete guifg=' - \ . synIDattr(synIDtrans(hlID('GitGutterDelete')), 'fg') - \ . ' guibg=' - \ . synIDattr(synIDtrans(hlID('StatusLine')), 'bg') - execute 'highlight default GitStatusAddNC guifg=' - \ . synIDattr(synIDtrans(hlID('GitGutterAdd')), 'fg') - \ . ' guibg=' - \ . synIDattr(synIDtrans(hlID('StatusLineNC')), 'bg') - execute 'highlight GitStatusChangeNC guifg=' - \ . synIDattr(synIDtrans(hlID('GitGutterChange')), 'fg') - \ . ' guibg=' - \ . synIDattr(synIDtrans(hlID('StatusLineNC')), 'bg') - execute 'highlight GitStatusDeleteNC guifg=' - \ . synIDattr(synIDtrans(hlID('GitGutterDelete')), 'fg') - \ . ' guibg=' - \ . synIDattr(synIDtrans(hlID('StatusLineNC')), 'bg') - - set statusline=%!StatusLine() -endfunction - -function! OpenGitStatus() - let l:previous_win = win_getid() - echo l:previous_win - leftabove vertical G - vertical resize 50 - setlocal winfixwidth - call win_gotoid(l:previous_win) -endfunction - -function! GetGitStatusWin() - let l:current_tabpage = tabpagenr() - for l:winnr in range(1, winnr('$')) - let l:bufnr = winbufnr(l:winnr) - let l:buftype = getbufvar(l:bufnr, '&buftype') - let l:bufname = bufname(l:bufnr) - if l:buftype ==# 'nowrite' && l:bufname =~# '^fugitive://.*\.git//$' - return l:winnr - endif - endfor - return 0 -endfunction - -function! ToggleGitStatus() - let l:win = GetGitStatusWin() - if l:win - execute l:win . 'wincmd c' - return - endif - - call OpenGitStatus() -endfunction - -function! s:SetupNERDTree() - if !exists('g:loaded_nerd_tree') - return - endif - - " Exit Vim if NERDTree is the only window remaining in the only tab. - autocmd BufEnter * if tabpagenr('$') == 1 && - \ winnr('$') == 1 && - \ exists('b:NERDTree') && - \ b:NERDTree.isTabTree() | - \ quit | - \ endif -endfunction - -autocmd VimEnter * call s:SetupGitGutter() -autocmd VimEnter * call s:SetupNERDTree()