2017-01-26 1 views
0

Ich versuche, Hervorhebung auf alle Übereinstimmungen mit regulären Ausdrücken nur auf der Cursor-Zeile anzuwenden. Dieser Code ist nahe, aber ich muss den Bildschirm mit jedem Bewegen des Cursors neu zeichnen, und er macht den Cursor zu einem Teil der Regex, was nicht ideal ist.Vim Skript Highlight Regex passt auf Cursor-Zeile

~/.vim/syntax/abc.vim: 
 
syn match abcline  "abc\%#" 
hi def link abcline Todo 
+0

Siehe ': h verbergen '. –

+0

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). –

+0

@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

Antwort

0

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

+0

Ausgezeichnet! Danke für die Lösung und alternative Vorschläge! – Daniel