Wie stelle ich die Hintergrundfarbe nur für das aktive Fenster von Vim ein?

Wie stelle ich die Hintergrundfarbe nur für das aktive Fenster von Vim ein?

Eine kleine, aber optisch ansprechende Funktion, die die Benutzerfreundlichkeit etwas verbessert: Ich möchte, dass Vim für das aktive Fenster eine andere Hintergrundfarbe verwendet.

Hier ist eine Skizze dessen, was ich suche:

Bildbeschreibung hier eingeben

Normalerweise wäre der gesamte Hintergrund von Vim schwarz, aber wenn nur das aktive Fenster eine eigene Farbe hätte, um die Aufmerksamkeit des Benutzers zu erregen, reicht es nicht aus, nur die Statusleiste hervorzuheben!

Antwort1

Heptite, danke für die Idee.

Ich ersetze einfach die Autocmds von WinEnter und WinLeave, um vor jeder Zeile Zeilennummern hinzuzufügen/zu entfernen:

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

Jetzt lässt sich eleganter verfolgen, welches Fenster aktiv ist.

Antwort2

Die Hervorhebungsgruppen, die die Standardhintergrundfarbe steuern, sind " Normal" und " NonText". Leider handelt es sich dabei um "globale" Hervorhebungen, die nicht für jedes Fenster einzeln "lokalisiert" werden können.

Hier ist jedoch ein wirklich hässliches und unhandliches Beispiel:

augroup BgHighlight
    autocmd!
    ActiveWindow hervorheben guibg=hellblau
    autocmd WinEnter * matchadd('ActiveWindow', '.*', 10, 1682) aufrufen
    autocmd WinLeave * matchdelete(1682) aufrufen
augroup END

doautocmd BgHighlight WinEnter -

Da dies nur ein Beispiel ist, müssen Sie es Ihren individuellen Anforderungen entsprechend ändern, z. B. durch Hinzufügen der Hervorhebung „ctermbg=...“ zusammen mit „guibg=...“.

Der Nachteil besteht darin, dass dadurch nur der Hintergrund des vorhandenen Textes in den Dateien hervorgehoben wird, nicht die ganze Zeile/das ganze Fenster. (Wie gesagt: hässlich und umständlich.)

Antwort3

Ich habe nach dem gleichen gesucht und entdeckt (durch diese Ausgabehttps://github.com/vim/vim/issues/2686), dass dies nun unterstützt wird durch die wincolor(https://vimhelp.org/options.txt.html#%27wincolor%27) Option, die lokal festgelegt werden kann (setl), also habe ich diese in meiner vimrc hinzugefügt.

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

was mir dieses Ergebnis gibt (ja, ich erwarte keinen großen Unterschied, aber glauben Sie mir, es ändert alles).

Bildbeschreibung hier eingeben

Antwort4

Ich habe die von @Tshirtman bereitgestellte Lösung ergänzt und die Anpassung wie folgt geändert. Beim Wechseln zwischen geteilten Fenstern (bei gleichzeitiger Freigabe desselben) sah es sehr gut aus:

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

verwandte Informationen