In diesen Fragen und Antworten wird festgestellt, dass es eine Markierungsgruppe für gibt CursorLineNr
, die für die Zeilennummer der Cursorzeile gilt, wenn diese aktiviert set cursorline
ist.
Ich stelle fest, dass die Verwendung der Cursorzeile auch die Farbe für eine andere Hervorhebungsgruppe ändert. Dies SpecialKey
gilt, wenn Sie z.
set list listchars=tab:\|_,trail:-
Das Problem dabei ist für mich, dass ich einen dunklen Hintergrund (und damit eine dunkle Cursorlinie) verwende. Meine normale SpecialKey
Einstellung ist auch sehr dunkel, so dass die listchar
Symbole nur am Rande sichtbar sind. Aber wenn cursorline
sie weiß sind , ist der trail
Charakter nicht mehr von einem Treffer zu unterscheiden -
. Das Trail-Zeichen wird jedes Mal verwendet, wenn Sie ein Leerzeichen am Ende einer Zeile eingeben. Dies ist also mehr als ein kleines Problem. Normalerweise umfasst das Eingeben einer Zeile von Anfang bis Ende eine Reihe von Leerzeichen, die während der Arbeit leicht von einem Bindestrich-Tippfehler zu unterscheiden sind (oder umgekehrt, ein Leerzeichen-Tippfehler, wenn Sie einen Bindestrich beabsichtigt haben).
Da keine der anderen Highlight-Gruppen betroffen zu sein scheint, CursorLineNr
wird vermutlich so etwas angewendet, aber wenn hi
ich die Liste durchschaue, sehe ich nichts Passendes.
Weiß jemand was das ist? Besser noch, kennt jemand eine Möglichkeit, eine Markierungsgruppe für die Cursorzeile zu ändern?
quelle
Antworten:
Ich habe für eine mit diesem Verhalten zu kämpfen langen Zeit.
Grundsätzlich wird die Vordergrundfarbe von
SpecialKey
in der aktuellen Zeile in die Vordergrundfarbe vonNormal
if geändert :cursorline
Option ist aktiviert,CursorLine
Hervorhebungsgruppe ist eine Hintergrundfarbe festgelegt.Ich habe dieses Verhalten nie beheben können, egal was ich versucht habe. Das Problem liegt irgendwo im Quellcode von Vim.
quelle
~
was etwas weniger verwirrend ist (möglicherweise wird auch nach einem obskuren Unicode-Zeichen gesucht).none
), habe versucht, seinen Standardwert zuWas für mich funktionierte, waren die folgenden Zeilen in meiner
.vimrc
(basierend auf der Antwort von Igor Mikushkin ).VimEnter
Funktioniert nur für die erste Datei, die Sie öffnen, nicht für Dateien / Registerkarten, die Sie anschließend öffnen.BufNewFile,BufRead
hat bisher für alle Puffer gearbeitet, die ich geöffnet habe.Die erste Zeile enthält Leerzeichen. Vim hebt sie in der
SpecialKey
Gruppe hervor, daher wenden wir diese Stile auf sie an.Die zweite Zeile enthält Zeilenumbrüche. Vim hebt sie in der
NonText
Gruppe hervor, daher wenden wir diese Stile auf sie an. Sie brauchen die zweite Zeile nur dann wirklich, wenn IhreNonText
Zeichen anders hervorgehoben sind alsSpecialKey
Zeichen.quelle
Die folgenden Zeilen in .vimrc haben das Problem für mich behoben.
Es überschreibt andere Stilanwendungen für Tabulatoren und nachgestellte Leerzeichen innerhalb einer Cursorzeile.
quelle
matchadd()
Ergebnis in einer Variablen, wenn Sie es nicht verwenden?Es gibt noch eine andere "Lösung", eigentlich eine Art Kludge für dieses Problem.
Ich habe benutzerdefinierte Syntaxgruppen für solche wie "Listchars".
So was:
Sie könnten so etwas tun (obwohl ich es nicht getestet habe):
Bei diesem Ansatz gibt es jedoch mindestens zwei Probleme:
Um dies zu beheben, habe ich spezielle Funktionen wie:
für jede Syntaxgruppe, die ich häufig verwende, um die Hervorhebung manuell zu korrigieren. Sie können dies auf andere Weise tun, z. B. durch automatische Befehle oder durch manuelles Festlegen des Werts für die Syntaxoption. Damit das Zurücksetzen der Syntax funktioniert, muss außerdem Folgendes vorhanden sein:
in jeder entsprechenden Syntaxdatei, wie
~/.vim/after/syntax/javascript.vim
let g:indentLine_newVersion = 0
, wo das Plugin normal funktioniert.Auf andere Weise funktioniert dieser Ansatz normalerweise ohne das IndentLine-Plugin:
Und akzeptabel damit:
quelle