2010-01-27 11 views
8

Ich möchte vim markieren ganze Zeilen, die bestimmte Muster entsprechen. Ich kann den ganzen Text in einer Zeile hervorheben (indem ich syn match MyMatch "^.*text-to-match.*$" mache), aber es bleibt immer am Ende des Textes stehen. Ich würde gerne bis zum Ende des Semesters fortfahren, zum Beispiel CursorLine hervorheben.Wie mache ich Vim Syntax eine ganze Zeile markieren?

Ich habe versucht, $ durch eine \n^ zu ersetzen, in der Hoffnung, dass es wickeln würde. Keine Änderung. (Ich habe nicht erwartet, dass das funktionieren würde, aber es kann nicht schaden, es zu versuchen.) Ich habe auch versucht, den syn-Muster-Offset einzustellen (was ich hier gelesen habe: http://vimdoc.sourceforge.net/htmldoc/syntax.html#:syn-pattern). Lange Rede, kurzer Sinn: Durch das Hinzufügen von he=he-5 werden 5 Zeichen weniger hervorgehoben, aber he=he+5 zeigt keine zusätzlichen Zeichen, da keine Zeichen hervorgehoben werden müssen.

Dies ist mein erster Versuch, eine vim-Syntax zu erstellen, und ich bin relativ neu in vim. Bitte sei sanft und nenne Erklärungen.

Danke!

(edit: Vergessen zu schließen, ist dies ein mehrzeiliges Highlight, das wahrscheinlich die Komplexität ein wenig erhöht..)

+0

Ist Ihr Muster zu lesen, sollte '^ * Text-to-Match * $'..? – Cascabel

+0

Jefromi ist es. SO verwendet offenbar gewundene Sterne, um kursiv zu schreiben. Es ist jetzt behoben. – valadil

+0

Keine anderen Syntaxen, aber es ist durchaus möglich, dass der Rest meiner Syntax sich selbst manipuliert. Vielleicht sollte ich von den Zeilen ausgehen, die ich ganz hervorheben möchte und dann den Rest schreiben, sobald das funktioniert? – valadil

Antwort

8

Aus der Dokumentation auf syn-pattern:

Der markierte Bereich wird nie außerhalb seines des abgeglichenen Textes.

Ich würde mich überraschen, wenn Sie das zur Arbeit bekommen, aber dann ist Vim immer voller Überraschungen.

+0

Ja, aber das Muster entspricht der gesamten Linie. Es sollte die gesamte Linie markieren. – Cascabel

+1

Wenn das Fenster aus 80 Zeichen besteht und der Text aus 4 Zeichen besteht, werden nur die 4 Zeichen zugeordnet und nur die 4 Zeichen hervorgehoben. Das OP möchte, dass alle 80 Spalten markiert sind. – Jay

+1

Jay ist richtig. Es gibt keine Möglichkeit, das Verhalten der Option 'cursorline' mit Standard-Syntaxhervorhebung nachzuahmen. Die Syntax-Hervorhebung soll lediglich vorhandenen Text hervorheben. – jamessan

10

Es ist nicht sehr adaptiv als Dateinamen (Puffer) und Linie zur vollen Reihe Highlight muss explizit identifiziert werden, aber anscheinend der sign Befehl verwendet werden kann:

möglich Es ist ein ganze hervorzuheben Linie mit dem : Zeichen Mechanismus.
Ein Beispiel kann bei :help sign-commands
In Kürze finden:

:sign define wholeline linehl=ErrorMsg 
:sign place 1 name=wholeline line=123 file=thisfile.txt 

Natürlich sollten Sie eine higlight Gruppe auswählen, die die Farbe des Hintergrund für das linehl Argument ändert.

Quelle: Erik Falor, vim mailing list

+0

Sie können die ganze Zeile auf diese Weise im Hintergrund markieren, aber der Text verliert seine Syntax-Hervorhebung. –