Überschreiben Sie die Hintergrundfarbe der Cursorlinie durch Hervorheben der Syntax

7

Ich habe die Hintergrundfarbe der aktuellen Linie wie folgt auf hellgrau eingestellt:

hi CursorLine cterm=NONE ctermbg=253

(Beachten Sie, dass mein Farbschema Schwarz auf Weiß ist.)

Auf diese Weise werden jedoch alle durch Syntaxhervorhebung festgelegten Hintergrundfarben dadurch überschrieben. Wenn also ein Wort in der aktuellen Zeile hervorgehoben wird, z. B. Weiß auf Rot, wird der Text als Weiß auf Hellgrau angezeigt. Ich sehe nur, dass die Zeile (oder ein Teil davon) rot hervorgehoben werden soll, wenn ich den Cursor auf eine andere Zeile bewege.

Ich möchte, dass nur der Teil der aktuellen Zeile, für den keine spezielle Hintergrundfarbe festgelegt ist, durch die Cursorlinie hellgrau hervorgehoben wird, die Hervorhebung der Cursorzeile jedoch durch die Syntaxhervorhebung überschrieben wird.

Ist das möglich?

PS: Der spezielle Fall, in dem ich auf dieses Problem gestoßen bin, ist die zweite Zeile in einer git commit tmp-Datei, in der der Text in der zweiten Zeile weiß-rot ist (aus welchem ​​Grund auch immer).

Flotzilla
quelle
Der "was auch immer" Grund ist, dass Sie die zweite Zeile Ihres Git Commits leer lassen sollen. Dies ist der bevorzugte Stil bei Git-Commits: 1 kurze Zeile (~ 60 Zeichen), die das Commit beschreibt, gefolgt von einer leeren Zeile, gefolgt von einer Erklärung, die so groß ist, wie Sie möchten / können.
Shahbaz
@ Shahbaz: Ok, danke für die Erklärung, die die Dinge klärt. Ich habe git bisher nur beiläufig für einige private Dinge verwendet, es aber nie wirklich gelernt (dh einen Leitfaden oder so gelesen), daher sind mir solche Dinge noch nicht bewusst. Das Lesen des Git-Buches steht jedoch auf meiner TODO-Liste, bevor ich anfange, Git ausführlicher zu verwenden.
Flotzilla
Git ist fantastisch und kann Dinge tun, die über Ihre Vorstellungskraft hinausgehen, ist jedoch für den täglichen Gebrauch sehr einfach. Viel Spaß beim Lernen!
Shahbaz

Antworten:

5

Ich hatte einmal eine Änderung in der Mailingliste vim_dev vorgeschlagen , aber Bram war mit folgenden Gründen dagegen:

Wenn die Syntax-Hintergrundfarbe die Hintergrundfarbe der Cursorlinie außer Kraft setzt, wird die Cursorlinie in Teile gebrochen oder ist kaum sichtbar.

Alternative

Mit der matchadd()Funktion können Sie eine angeben {priority}, die bestimmt, ob die Hervorhebung vor oder hinter der Cursorlinie erfolgt. Leider unterscheidet sich dies völlig von der Syntaxhervorhebung und hat sogar einen anderen Umfang. Daher hilft es nicht bei Syntaxproblemen, sondern ermöglicht andere Verwendungen, z. B. Hervorhebungen durch mein Mark-Plugin .

Problemumgehung

Sie können die Syntax-Hintergrundfarbe beibehalten, wenn Sie das reverseAttribut verwenden. Zum Beispiel anstatt zu definieren

:hi Todo guifg=Black guibg=Yellow

mach das:

:hi Todo guifg=Yellow guibg=Black gui=reverse

Leider haben Sie jetzt ein anderes Problem: Die Textfarbe (Vordergrundfarbe) wechselt von Schwarz zur Cursorlinienfarbe. Dies funktioniert gut für den von Ihnen erwähnten Weiß-auf-Rot-Fehler (Hervorheben zu (hell) -Cursorzeile-auf-Rot), in meinem TodoBeispiel jedoch weniger gut (Cursorzeile-auf-Gelb). Darüber hinaus wird das reverseAttribut nicht in allen Terminals unterstützt.

Zusammenfassung

Leider gibt es keine einfache Lösung. Trotz der Mängel verwende ich die obige Problemumgehung (ein großes Lob an @romainl, in dessen Konfiguration ich das zum ersten Mal gesehen habe!)

Ingo Karkat
quelle
Danke für deine Antwort. Aber verstehe ich es richtig, dass Ihre vorgeschlagenen Lösungen / Problemumgehungen darin bestehen, die Syntaxdateien zu ändern (dh anzugeben, dass eine bestimmte Hervorhebung Vorrang vor der Hervorhebung der Farblinie haben soll)? Wenn ja, ist das nicht das, wonach ich suche. Ich möchte angeben, dass die Hervorhebung der Farblinien hinter jeder Syntaxhervorhebung platziert wird. In diesem Fall muss ich nur akzeptieren, wie es funktioniert, dh, dass die Syntaxhervorhebung immer durch die Farblinienhervorhebung überschrieben wird.
Flotzilla
Syntaxdateien definieren normalerweise keine Farben, sondern nur :hi linkfür vorhandene Gruppen (wie Todo). Bei meiner Problemumgehung würden Sie Ihr persönliches Farbschema entweder direkt oder in Ihrem ändern .vimrc.
Ingo Karkat
Ok ja sicher, auf den zweiten Blick habe ich das mehr oder weniger gemeint. Trotzdem müsste ich das Verhalten bestimmter Hervorhebungen ändern, um das der Cursorzeile zu überschreiben, anstatt das Verhalten der Cursorzeile zu ändern, um von Hervorhebungen überschrieben zu werden (was anscheinend nicht möglich ist). Im Moment werde ich nur das Schicksal akzeptieren müssen, aber Ihre Problemumgehung könnte nützlich sein, wenn es einige spezifische Hervorhebungen gibt, die mich oft nerven und die ich dann selektiv beheben könnte.
Flotzilla