2013-07-08 11 views
5

Sto cercando di correggere l'espressione regolare per un modulo highlight indentation per emacs. Il modo in cui funziona attualmente è evidenziando una volta ogni% s spazi:Regex per ogni gruppo di spazi all'inizio di una riga

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

Ed ecco il risultato del campione del comportamento di un codice Verilog:

enter image description here

L'espressione regolare corrente funziona bene per la rientranze all'inizio di ogni riga. Tuttavia, c'è un artefatto indesiderabile che le sequenze di spazi che non si trovano all'inizio della riga sono eguagliate dalla regex. Vorrei modificare la regex in modo che corrisponda al comportamento precedente, ma solo all'inizio della riga. Ecco quello che voglio (ho dovuto richiamare manualmente):

enter image description here

Ecco che cosa ho provato. Puoi vedere dal risultato che il comportamento non è corretto.

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

Risultato:

enter image description here

provato anche

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

Risultato:

enter image description here

Qui è il codice rilevante, ma mi scuso Non è un esempio funzionante. Si prega di utilizzare il link sopra per un esempio di lavoro.

(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

sto bene conosco espressioni regolari, ma non sono a conoscenza di come carattere -la chiusura è fatta. Se sei disposto a spiegarlo, potrei essere in grado di aiutarti. È solo una questione di scrivere una regexp che corrisponde e quindi specificare quale gruppo al suo interno dovrebbe essere evidenziato? – Malabarba

+0

Se è così, la tua seconda espressione regolare sembra avere troppi spazi. Potrebbe '"^\ (\ (\) \ {% s \} \) \ {1,} "' funzionare? – Malabarba

+1

Si consiglia di provare [indent-guide] (https://github.com/zk-phi/indent-guide) invece. È un'implementazione alternativa di questa funzionalità, che potrebbe funzionare meglio. – lunaryorn

risposta

1

Supponendo che la regola font-lock corrente assomiglia:

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

si potrebbe usare

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

Ho aggiunto la regola di blocco font alla domanda. Non è lo stesso del tuo post, ma sto cercando di capire come prendere ciò che hai fatto e applicarlo a ciò che ho. – travisbartley

+0

L'ho provato, ma niente viene colorato. – travisbartley

+0

Ho regolato il mio codice per adattarlo alla regola che si utilizza. È garantito al 100% non testato, quindi potrebbe richiedere modifiche minori per farlo funzionare, naturalmente. – Stefan

Problemi correlati