Come cercare una delle due stringhe simili in Vim?


29

In Vim, se voglio fare una ricerca che corrisponda a "planA" o "planB", so che posso fare questo:

/plan[AB]

Questo funziona perché regex consente sia A che B come set di caratteri.

Ma come posso specificare una delle due stringhe complete? Ad esempio, "planetAwesome" o "planetTerrible"?

Ciò corrisponderà a entrambi, insieme a "planetAnythingHereAsLongAsItsJustLetters":

planet\([a-zA-Z]*\)

Come posso abbinare esattamente solo le stringhe che corrispondono esattamente a "planetAwesome" o "planetTerrible"?


In realtà, le parentesi creano una classe di caratteri. plan[ABC]partite planA, planBe planCugualmente bene.
Christopher Bottoms,

@molsecules - giusto, grazie. Ho aggiornato la domanda.
Nathan Long,

Risposte:


43
/planet\(Awesome\|Terrible\)

Per visualizzare la documentazione pertinente, rilasciare :help /e scorrere fino alla sezione "La definizione di un motivo".


1
Ah! Non stavo sfuggendo alle parentesi quando ho provato questo. Interessante: pensavo di dover solo sfuggire ai personaggi letterali.
Nathan Long,

1
@Nathan: vari motori regex hanno regole diverse su quali personaggi devono essere sfuggiti per renderli speciali vs. devono essere sfuggiti per renderli letterali (es. POSIX BRE vs. ERE). È possibile modificare i requisiti di fuga in Vim su una base per-modello includendo una delle fughe speciali: \m, \M, \v, o\V . C'è anche l' 'magic'opzione , ma di solito è meglio lasciarla sola, poiché ha un effetto globale (a meno che non venga sovrascritta da una delle bandiere sopra).
Chris Johnsen,

1
Usando molta magia sembra così:/\vplanet(Awesome|Terrible)
SergioAraujo,

4

Per aggiungere alla risposta di Gilles, potresti voler aggiungere alcune cose:

/\<planet\(Awesome\|Terrible\)\>

\<segna l'inizio di una 'parola' (essenzialmente alfanumerici)
\>segna la fine di una 'parola' (essenzialmente alfanumerici)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.