Ihr Ansatz mit dem speziellen \%#
ist richtig. Leider warnt die :help
explizit vor dem notwendigen Redraw (was aus Performance-Gründen nicht automatisch gemacht wird).
\%# Matches with the cursor position.
WARNING: When the cursor is moved after the pattern was used, the
result becomes invalid. Vim doesn't automatically update the matches.
This is especially relevant for syntax highlighting and 'hlsearch'.
In other words: When the cursor moves the display isn't updated for
this change. An update is done for lines which are changed (the whole
line is updated) or when using the |CTRL-L| command (the whole screen
is updated).
So benötigen Sie einen :autocmd CursorMoved,CursorMovedI
ein erneutes Zeichnen auszulösen. Alternativ können Sie die aktuelle Zeilennummer in den regulären Ausdruck (\%23l
) einbetten und die Syntaxdefinition aktualisieren, während sich der Cursor bewegt (erneut über :autocmd
). Ich bin kein Fan solcher häufigen Redraws; vielleicht würde Ihr Anwendungsfall auch ermöglichen, die Hervorhebung nur bei Bedarf auszulösen (über ein Mapping) oder nur zu aktualisieren, wenn die Verwendung pausiert (CursorHold[I]
Ereignisse).
Syntax-Hervorhebung nur für die aktuelle Zeile ist ungewöhnlich; Überdenken Sie auch, ob eine globale Hervorhebung funktioniert (wenn Sie die verwendete Hervorhebungsgruppe abschwächen; besonders Todo
ist sehr visuell störend).
Siehe ': h verbergen '. –
Bitte geben Sie mehr Hintergrund; Was ist dein endgültiges Ziel? Wenn es sich bei einer Frage nur um einen kleinen technischen Schritt handelt, ist es schwierig, eine gute Antwort zu geben. Wenn Sie uns nicht sagen, warum Sie das wollen, ist es leicht, dem [XY-Problem] (http://meta.stackoverflow.com/questions/66377/what-is-the-xy-problem) zu unterliegen). –
@IngoKarkat Ziel ist es, die Syntax in der Cursorzeile hervorzuheben. Der Grund dafür, dass es nur auf der Cursorlinie hervorgehoben ist, liegt darin, dass es so oft erscheint, dass die Hervorhebung ablenkt, so dass der Benutzer Details verlieren würde. – Daniel