Como definir a cor de fundo apenas para a janela ativa do Vim?

Como definir a cor de fundo apenas para a janela ativa do Vim?

Um recurso pequeno, mas visualmente agradável, e que aumenta um pouco a usabilidade, gostaria que o Vim usasse uma cor de fundo diferente para a janela ativa.

Aqui está um esboço do que estou procurando:

insira a descrição da imagem aqui

Normalmente esse vim teria todo o fundo em preto, mas se ao menos a janela ativa tivesse uma cor própria para chamar a atenção do usuário. Destacar apenas a barra de status não é suficiente!

Responder1

Heptita, obrigado pela ideia.

Acabei de substituir os autocmds WinEnter e WinLeave para adicionar/remover números de linha na frente de cada linha:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set number
    autocmd WinLeave * set nonumber
augroup END

Agora ficou mais estiloso rastrear qual janela está ativa.

Responder2

Os grupos de destaque que controlam a cor de fundo padrão são " Normal" e " NonText". Infelizmente, esses são destaques "globais" e não podem ser "localizados" por janela.

No entanto, aqui está um exemplo realmente feio e desajeitado:

augroup BgHighlight
    autocmd!
    realçar ActiveWindow guibg=lightblue
    autocmd WinEnter * call matchadd('ActiveWindow', '.*', 10, 1682)
    autocmd WinLeave * call matchdelete(1682)
augroup END

doautocmd BgHighlight WinEnter -

Como este é apenas um exemplo, você terá que modificá-lo para atender às suas necessidades individuais, como adicionar um destaque ctermbg=... junto com o guibg=...

A desvantagem é que isso destacará apenas o plano de fundo do texto existente nos arquivos, e não a linha/janela inteira. (Como eu disse, feio e desajeitado.)

Responder3

Eu estava procurando o mesmo e descobri (através deste problemahttps://github.com/vim/vim/issues/2686) que isso agora é suportado por meio do wincolor(https://vimhelp.org/options.txt.html#%27wincolor%27), que pode ser definida localmente (setl), então adicionei isso no meu vimrc.

" different color depending on focus
hi NormalNC ctermbg=234
augroup winbg
    autocmd!
    au WinEnter * setl wincolor=
    au WinLeave * setl wincolor=NormalNC
augroup END

o que me dá esse resultado (sim, não estou procurando uma diferença muito grande, mas acredite, isso muda tudo).

insira a descrição da imagem aqui

Responder4

Adicionando a solução fornecida por @Tshirtman, acabei de modificar essa personalização e pareceu muito bom ao alternar entre painéis divididos (apenas compartilhando o mesmo):

    hi NormalNC ctermbg=236 ctermfg=102
    augroup winbg
        autocmd!
        au WinEnter * setl wincolor= syn=on
        au WinLeave * setl wincolor=NormalNC syn=off
    augroup END

informação relacionada