
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:
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).
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