¿Cómo configurar el color de fondo solo para la ventana activa de Vim?

¿Cómo configurar el color de fondo solo para la ventana activa de Vim?

Una característica pequeña pero visualmente agradable y que aumenta ligeramente la usabilidad. Me gustaría que Vim usara un color de fondo diferente para la ventana activa.

Aquí hay un bosquejo de lo que busco:

ingrese la descripción de la imagen aquí

Normalmente, ese vim tendría todo el fondo en negro, pero si solo la ventana activa tuviera su propio color para resaltar la atención del usuario. ¡Resaltar sólo la barra de estado no es suficiente!

Respuesta1

Heptite, gracias por la idea.

Simplemente reemplazo los autocmd de WinEnter y WinLeave para agregar/eliminar números de línea delante de cada línea:

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

Ahora es más elegante rastrear qué ventana está activa.

Respuesta2

Los grupos resaltados que controlan el color de fondo predeterminado son " Normal" y " NonText". Lamentablemente, estos son aspectos destacados "globales" y no se pueden "localizar" por ventana.

Sin embargo, aquí hay un ejemplo realmente feo y torpe:

augroup BgHighlight
    autocmd!
    resaltar ActiveWindow guibg=azul claro
    autocmd WinEnter * llamar a matchadd('ActiveWindow', '.*', 10, 1682)
    autocmd WinLeave * llamar a matchdelete(1682)
augroup END

doautocmd BgHighlight WinEnter -

Dado que este es solo un ejemplo, tendrá que modificarlo para adaptarlo a sus necesidades individuales, como agregar un resaltado ctermbg=... junto con guibg=...

El inconveniente es que esto sólo resaltará el fondo del texto existente en los archivos, no toda la línea/ventana. (Como dije, feo y torpe).

Respuesta3

Estaba buscando lo mismo y descubrí (a través de este númerohttps://github.com/vim/vim/issues/2686) que esto ahora es compatible a través de wincolor(https://vimhelp.org/options.txt.html#%27wincolor%27), que se puede configurar localmente (setl), así que agregué esto en mi vimrc.

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

lo que me da este resultado (sí, no busco una diferencia muy grande, pero créanme, lo cambia todo).

ingrese la descripción de la imagen aquí

Respuesta4

Agregando la solución proporcionada por @Tshirtman, simplemente modifiqué esa personalización a esto y parecía verse muy bien al cambiar entre paneles divididos (simplemente comparto lo mismo):

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

información relacionada