From 6a4627accacea4ca2a6a074dff20421bbad35c2e Mon Sep 17 00:00:00 2001 From: Oscar Wallberg Date: Fri, 5 Sep 2025 22:30:51 +0200 Subject: [PATCH] fix(vim): Fix git status colors in status line --- .vimrc | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/.vimrc b/.vimrc index af4954a..d69885e 100644 --- a/.vimrc +++ b/.vimrc @@ -548,27 +548,34 @@ nmap gl :Flog " {{{1 Statusline -function! GitStatus() +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#' . printf('+%d', a) . '%*'] + let parts += ['%#GitStatusAdd' . suffix . '#' . printf('+%d', a) . '%*'] endif if m > 0 - let parts += ['%#GitStatusChange#' . printf('~%d', m) . '%*'] + let parts += ['%#GitStatusChange' . suffix . '#' . printf('~%d', m) . '%*'] endif if r > 0 - let parts += ['%#GitStatusDelete#' . printf('-%d', r) . '%*'] + let parts += ['%#GitStatusDelete' . suffix . '#' . printf('-%d', r) . '%*'] endif - if empty(parts) - return '' + let git_status = '' + + if !empty(parts) + let git_status = ' ' . join(parts, ' ') endif - return ' ' . join(parts, ' ') + return " %f%4( %m%) " + \ . git_status + \ . "%=" + \ . "%{&filetype} %-6.6{&fileencoding} %-4.4{&fileformat}" + \ . " %4.4(%p%%%)%6.6l:%-3.3v" endfunction function! s:SetupGitGutter() @@ -588,11 +595,20 @@ function! s:SetupGitGutter() \ . 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=\ %f%{%GitStatus()%}\ %m - \%= - \%-5.5{&filetype}\ %-6.6{&fileencoding}\ %-4.4{&fileformat} - \\ %4.4(%p%%%)%5.5l:%-3.3v + set statusline=%!StatusLine() endfunction autocmd VimEnter * call s:SetupGitGutter()