vim - escurecer painéis divididos inativos
Pergunta
Se você estiver familiarizado com o aplicativo iTerm2, saberá que pode dividir visualizações semelhantes ao vim, e as visualizações inativas ficam "esmaecidas".
Normalmente trabalho no vim com três visualizações divididas verticais e seria bom escurecer as inativas definindo a cor de fundo para um tom mais escuro, por exemplo.
Existe uma maneira de fazer isso?
Solução
Eu encontrei a seguinte solução (usando 'colorcolumn' e removendo a 'linha do cursor'):
" Dim inactive windows using 'colorcolumn' setting
" This tends to slow down redrawing, but is very useful.
" Based on https://groups.google.com/d/msg/vim_use/IJU-Vk-QLJE/xz4hjPjCRBUJ
" XXX: this will only work with lines containing text (i.e. not '~')
function! s:DimInactiveWindows()
for i in range(1, tabpagewinnr(tabpagenr(), '$'))
let l:range = ""
if i != winnr()
if &wrap
" HACK: when wrapping lines is enabled, we use the maximum number
" of columns getting highlighted. This might get calculated by
" looking for the longest visible line and using a multiple of
" winwidth().
let l:width=256 " max
else
let l:width=winwidth(i)
endif
let l:range = join(range(1, l:width), ',')
endif
call setwinvar(i, '&colorcolumn', l:range)
endfor
endfunction
augroup DimInactiveWindows
au!
au WinEnter * call s:DimInactiveWindows()
au WinEnter * set cursorline
au WinLeave * set nocursorline
augroup END
Veja em meus (atuais) dotfiles: https://github.com/ blueyed / dotfiles / blob / master / vimrc # L351
Atualizar Eu criei um plugin a partir dele: https://github.com/blueyed/vim-diminactive
Outras dicas
No neovim (v0.2.1), a seguinte configuração escurecerá os painéis inativos:
hi ActiveWindow ctermbg=16 | hi InactiveWindow ctermbg=233
set winhighlight=Normal:ActiveWindow,NormalNC:InactiveWindow
Alterar a cor do plano de fundo conforme você descreve exigiria diferentes esquemas de cores para diferentes janelas do Vim.Pelo que eu sei, isso não é possível, pois é uma configuração global (consulte esta resposta de alguns dias atrás).
Como auxílio visual para saber qual janela está ativa, acho que a linha de status é normalmente suficiente.Os grupos de destaque são diferentes para a janela ativa (hi StatusLine
) e quaisquer janelas inativas (hi StatusLineNC
).Você pode escolher um esquema de cores com uma contraste bem definido entre eles ou editar seu esquema de cores favorito.
Lançando isso como uma nova resposta. https://github.com/TaDaa/vimade esmaece buffers inativos, preserva o destaque de sintaxe e também podesinais de desbotamento.Eu sou o autor, mas acho que isso pode ser útil para alguns como uma alternativa mais recente.Suporta nvim e vim8, terminais de 256 cores, termguicolors e gui.