2009-06-29 14 views
6

Se voglio tutte le righe con il testo "rubino" ma non "myruby", questo è ciò che farei.Spiegazione delle espressioni regolari per vim

:g/\<ruby\>/ 

La mia domanda è qual è il significato di minore di e maggiore di simbolo qui? L'unica espressione regolare che ho usato è durante la programmazione in ruby.

Allo stesso modo, se voglio trovare tre righe vuote consecutive allora questo è quello che vorrei fare

/^\n\{3} 

mia domanda è perché sto scappando la prima parentesi graffa (apertura parentesi graffa), ma non sfuggire la seconda ricci tutore (chiusura parentesi graffa)?

risposta

13

il \< e \> limiti di parola media. In Perl, grep e less (per nominare 3 OTOH) si usa \b per questo, quindi immagino che sia lo stesso in Ruby.

Per quanto riguarda la seconda domanda, l'escape è necessario per l'intera espressione {3}. Non stai sfuggendo a ogni tuta arricciata, ma piuttosto tutto insieme.

Vedere this question per ulteriori informazioni.

0

Per la prima espressione regolare, si potrebbe anche fare:

:g/[^\ ]ruby\/

Ciò garantirebbe c'era uno spazio prima e dopo la parola chiave rubino.

+3

ma che non corrisponde a 'ruby' all'inizio o alla fine di una riga. –

+0

@Nathan Un buon punto ... – samoz

+0

né "un bel rubino", né "rubato questo rubino, quindi" ... –

16

Le regole di Vim per il backslash di escape in regex non sono coerenti. Devi sfuggire alla parentesi graffa di apertura di \{...}, ma l'[...] non richiede alcuna funzione di escape e un gruppo di cattura è \(...\) (sfuggendo al paren aperto e chiuso). Ci sono anche altre incongruenze.

Per fortuna Vim consente di modificare questo comportamento, anche in base alle espressioni regolari, tramite le impostazioni magic. Se inserisci \v all'inizio di un'espressione regolare, le regole di escaping diventano più coerenti; tutto è "magico" eccetto numeri, lettere e caratteri di sottolineatura, quindi non è necessario il backslash a meno che non si desideri inserire un carattere letterale diverso da quelli.

Il primo esempio diventa :g/\v<ruby>/ e il secondo esempio diventa /\v^\n{3}. Vedere :h /magic e :h /\v per ulteriori informazioni.

+2

Puoi "impostare la magia" sul tuo vimrc per avere sempre la modalità magica. A proposito, penso che un'espressione 'magica' sia iniziata da \ me non da \ v \ v significa 'no magic' – Oli

+0

No, in realtà \ v significa "molto magico". Ciò significa che tutti i caratteri ASCII ad eccezione di '0' - '9', 'a' - 'z', 'A' - 'Z' e '_' hanno un significato speciale in modo che non debbano essere sfuggiti. – binOr

Problemi correlati