Ich hätte gerne eine schöne und süße Darstellung des nachlaufenden Leerraums in meinem Terminal-Vim. Dies würde es mir ermöglichen, sie vor dem Schließen der Datei zu entfernen.
Mir ist bewusst, dass diese Frage sehr beliebt ist und ich habe bereits Dutzende von Antworten auf SO gefunden. Leider habe ich noch keine zufriedenstellende gefunden ...
Also werde ich versuchen, die gesammelten Informationen und die Lösungen, die ich gefunden habe, zusammenzufassen.
Lösung 1: Markieren Sie nachgestellte Leerzeichen manuell
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
Vorteile:
- Einfach zu verwenden
- Schnell
- Kompatibel mit
cursorline
Nachteile:
- Die gewählte Farbe ist nicht mit anderen Farbschemata kompatibel, da die Farbe manuell auf eingestellt wird
red
- Große rote Hintergrundblöcke sind nicht sehr ästhetisch
Lösung 2: Verwenden der Listenfunktion
set list
set listchars+=trail:◦
Vorteile:
- Einfach zu verwenden
- Schnell
Nachteile:
- Problem, wenn
:set cursorline
aktiviert - Die dedizierte Farbe für
list/trail
ist nicht konfigurierbar. Muss mit den anderen Listchars identisch sein
Lösung 3: Verwenden der Verdeckungsfunktion
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Vorteile:
- Schöner als die erste Lösung
Nachteile:
- Der Hintergrund ist nicht mit dem Hintergrund der Cursorzeile identisch
- Kann andere Verdeckungsregeln stören
- Die gewählte Farbe ist nicht immer mit dem Farbschema kompatibel
- Nicht kompatibel mit älteren Versionen von Vim
Meine Frage
Welche der aufgezählten Lösungen ist hinsichtlich Leistung und Kompatibilität am besten geeignet und wie kann ich alle Vor- und Nachteile erzielen?
Mit anderen Worten, ich möchte eine Lösung finden, bei der:
- Die hervorgehobene Farbe des Glanzlichts stimmt mit dem gewählten Farbschema überein
- Diese Farbe ist deutlich sichtbar, aber für die Augen nicht zu aggressiv
- Kompatibel mit
cursorline
(Hintergrund und Vordergrund) `- Kompatibel mit anderen Plugins, die möglicherweise Conceal verwenden
- Das nachfolgende Zeichen kann auf ein beliebiges Unicode-Zeichen gesetzt werden
:hi link ExtraWhitespace CursorLine
. Siehe:help hi-link
.Antworten:
In Bezug auf die Leistung sollte keines davon einen Unterschied machen. Vim ist meistens durch komplexe Syntaxmuster festgefahren. Das Muster hier ist recht einfach.
Verwenden Sie
:hi link
eine vorhandene Gruppe, damit die Hervorhebungsfarbe mit dem ausgewählten Farbschema übereinstimmt . normalerweise wäre das soError
. Natürlich ist dies nur dann von Bedeutung, wenn Sie häufig (ganz andere) Farbschemata wechseln. Andernfalls wäre es auch in Ordnung, geeignete Farben direkt zu verwenden (wie in Ihrer Lösung 1).Ich würde mich dafür entscheiden, aber
matchadd()
stattdessen verwenden:match
; Letzteres bleibt für die benutzerdefinierte Hervorhebung übrig. Auchclearmatches()
ist zu grob; Es löscht alle Übereinstimmungen und kann daher Auswirkungen auf Plugins haben. Sie können mein ShowTrailingWhitespace-Plugin für eine saubere und leistungsstarke Implementierung verwenden (einschließlich Ausnahmen für bestimmte Dateitypen). Ja, es ist eine viel größere Lösung, aber ich habe noch keine Auswirkungen bemerkt.Dies ist an sich schon eine nützliche Funktion, und wenn Sie sie dauerhaft aktiviert lassen, wirkt sich dies auf die Cursorpositionierung auf Tabulatorzeichen aus. Daher würde ich dies nicht empfehlen.
Dies wird sicherlich einige Syntaxen und Plugins beeinträchtigen, die diese Funktion verwenden. Schlechte Idee.
quelle
'listchars'
. Für mich ist die Hervorhebung mehr als ausreichend (insbesondere bei aggressiven Farben).