Zeigen Sie nachstehende Leerzeichen in vim an

Zeigen Sie nachstehende Leerzeichen in vim an

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()

Markieren Sie nachstehende Leerzeichen

Vorteile:

  • Einfach zu verwenden
  • Schnell
  • Kompatibel mitcursorline

Nachteile:

  • Die gewählte Farbe ist nicht mit anderen Farbschemata kompatibel, da die Farbe manuell eingestellt wurde aufred
  • Große rote Hintergrundblöcke sind nicht sehr ästhetisch

Lösung 2: Verwenden der Listenfunktion

set list
set listchars+=trail:◦

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Vorteile:

  • Einfach zu verwenden
  • Schnell

Nachteile:

  • Problem, wenn :set cursorlineaktiviert
  • Die dedizierte Farbe list/trailist 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

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

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 linkeine 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.

verwandte Informationen