Ich hätte gerne eine schöne und übersichtliche Anzeige der Leerzeichen am Ende in meinem Terminal vim. So könnte ich sie vor dem Schließen der Datei entfernen.
Mir ist bewusst, dass diese Frage recht häufig gestellt wird und ich habe bereits Dutzende Antworten auf SO gefunden. Leider habe ich noch keine zufriedenstellende gefunden ...
Daher werde ich versuchen, die gesammelten Informationen und die gefundenen Lösungen zusammenzufassen.
Lösung 1: Nachfolgende Leerzeichen manuell hervorheben
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 eingestellt wurde auf
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
list/trail
ist nicht konfigurierbar. Muss mit den anderen Listenzeichen identisch sein.
Lösung 3: Verwenden der Verbergen-Funktion
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 der gleiche wie der Cursorlinienhintergrund.
- Kann mit anderen Verbergungsregeln in Konflikt geraten
- 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 die Geeignetste und wie kann ich alle Vorteile und keine der Nachteile bekommen?
Mit anderen Worten, ich würde gerne eine Lösung finden, bei der:
- Die Farbe der Hervorhebungsspur stimmt mit dem gewählten Farbschema überein
- Diese Farbe ist deutlich sichtbar, aber nicht zu aggressiv für die Augen.
- Kompatibel mit
cursorline
(Hintergrund und Vordergrund)`- Kompatibel mit anderen Plugins, die möglicherweise verbergen
- Das nachfolgende Zeichen kann auf jedes Unicode-Zeichen gesetzt werden
Antwort1
In Bezug auf die Leistung sollte nichts davon einen Unterschied machen. Vim wird hauptsächlich durch komplexe Syntaxmuster verlangsamt. Das Muster hier ist ziemlich einfach.
Um die Hervorhebungsfarbe an das gewählte Farbschema anzupassen, verwenden Sie :hi link
eine vorhandene Gruppe; normalerweise wäre das Error
. Natürlich ist das alles nur dann von Bedeutung, wenn Sie häufig (ziemlich unterschiedliche) Farbschemata wechseln; andernfalls wäre es auch in Ordnung, direkt geeignete Farben zu verwenden (wie in Ihrer Lösung 1).
Lösung 1: Nachfolgende Leerzeichen manuell hervorheben
Ich würde das hier wählen, aber matchadd()
statt verwenden :match
; dadurch bleibt letzteres für benutzerdefinierte Hervorhebungen übrig. Außerdem clearmatches()
ist zu grob; es löschtalleÜbereinstimmungen und können daher Plugins beeinflussen. Sie können meinePlugin „ShowTrailingWhitespace“für eine saubere und leistungsstarke Implementierung (die auch Ausnahmen für bestimmte Dateitypen enthält). Ja, es ist eine viel umfangreichere Lösung, aber ich habe bisher keine Auswirkungen bemerkt.
Lösung 2: Verwenden der Listenfunktion
Das ist an sich eine nützliche Funktion, und sie dauerhaft eingeschaltet zu lassen, hat Auswirkungen auf die Cursorpositionierung bei Tabulatorzeichen, daher würde ich das nicht empfehlen.
Lösung 3: Verwenden der Verbergen-Funktion
Das wird sicherlich einige Syntaxen und Plugins beeinträchtigen, die diese Funktion verwenden. Schlechte Idee.