2013-07-08 17 views
5

Ich versuche, die Regex für ein highlight indentation Modul für Emacs zu beheben. Die Funktionsweise ist derzeit einmal markieren jedes% s Plätze:Regex für jede Gruppe von Leerzeichen am Anfang einer Zeile

"\\(\\) \\{%s\\}" 

Und hier ist ein Probenergebnis des Verhaltens einiger Verilog-Code:

enter image description here

Die aktuelle Regex für die funktioniert gut Einrückungen am Anfang jeder Zeile. Es gibt jedoch ein unerwünschtes Artefakt, bei dem Sequenzen von Leerzeichen, die nicht am Anfang der Zeile stehen, ebenfalls von der Regex abgeglichen werden. Ich möchte die Regex ändern, um das obige Verhalten, aber nur am Anfang der Zeile zu entsprechen. Hier ist, was ich will (ich hatte ihn manuell zeichnen):

enter image description here

Hier ist, was ich versucht habe. Sie können aus dem Ergebnis sehen, dass das Verhalten nicht richtig ist.

"^\\(\\(\\) \\{%s\\}\\) \\{1,\\}" 

Ergebnis:

enter image description here

versuchte auch

"^\\(\\(\\) \\{%s\\}\\)\\{1,\\}" 

Ergebnis:

enter image description here

Hier ist der relevante Code, aber ich entschuldige mich Es ist kein funktionierendes Beispiel. Bitte benutzen Sie den obigen Link für ein funktionierendes Beispiel.

(set (make-local-variable 'highlight-indentation-current-regex) 
    (format "\\(\\) \\{%s\\}" (- highlight-indentation-offset 1))) 
(font-lock-add-keywords nil `((,highlight-indentation-current-regex 
           (1 'highlight-indentation-face)))) 
+0

verwenden konnte ich gut bin mit regexps vertraut, aber ich bin nicht vertraut mit, wie Schriftart -locking ist fertig. Wenn Sie bereit sind, es zu erklären, könnte ich Ihnen vielleicht helfen. Ist es nur eine Frage zu schreiben, eine Regexp, die übereinstimmt und dann angeben, welche Gruppe innerhalb es hervorgehoben werden sollte? – Malabarba

+0

Wenn das der Fall ist, dann scheint Ihre zweite Regexp zu viele Leerzeichen zu haben. Könnte '"^\ (\ (\) \ {% s \} \) \ {1,} "' funktionieren? – Malabarba

+1

Sie können stattdessen [indent-guide] (https://github.com/zk-phi/indent-guide) versuchen. Es ist eine alternative Implementierung dieser Funktion, die möglicherweise besser funktioniert. – lunaryorn

Antwort

1

sieht Ihre aktuelle font-lock Regel Unter der Annahme, wie:

(,highlight-indentation-current-regex (1 'highlight-indentation-face)) 

Sie

(,highlight-indentation-current-regex (1 (if (save-excursion (skip-chars-backward " \t") (bolp)) 'highlight-indentation-face))) 
+0

Ich habe der Frage die Font-Lock-Regel hinzugefügt. Es ist nicht dasselbe wie dein Post, aber ich versuche zu verstehen, wie du das, was du gemacht hast, nimmst und auf das, was ich habe, anwende. – travisbartley

+0

Ich habe es versucht, aber nichts wird vereinheitlicht. – travisbartley

+0

Ich habe meinen Code an die von Ihnen verwendete Regel angepasst. Es ist garantiert zu 100% ungetestet, so dass es vielleicht kleinere Verbesserungen braucht, um es zur Arbeit zu bringen, natürlich. – Stefan

Verwandte Themen