Comment rechercher l'une des deux chaînes similaires dans Vim?

29

Dans Vim, si je veux faire une recherche qui correspond à "planA" ou "planB", je sais que je peux le faire:

/plan[AB]

Cela fonctionne parce que l'expression régulière autorise A ou B comme ensemble de caractères.

Mais comment puis-je spécifier l'une des deux chaînes complètes? Par exemple, "planetAwesome" ou "planetTerrible"?

Cela correspondra aux deux, ainsi qu'à "planetAnythingHereAsLongAsItsJustLetters":

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

Comment puis-je faire correspondre uniquement des chaînes qui correspondent exactement à "planetAwesome" ou "planetTerrible"?

Nathan Long
la source
En fait, les crochets créent une classe de caractères. plan[ABC]matchs planA, planBet planCtout aussi bien.
Christopher Bottoms
@molsecules - à droite, merci. J'ai mis à jour la question.
Nathan Long

Réponses:

43
/planet\(Awesome\|Terrible\)

Pour voir la documentation pertinente, lancez :help /et faites défiler jusqu'à la section «La définition d'un modèle».

Gilles 'SO- arrête d'être méchant'
la source
1
Ah! Je n'échappais pas aux parenthèses quand j'ai essayé ça. Intéressant - je pensais que je n'avais qu'à échapper aux caractères littéraux.
Nathan Long
1
@Nathan: Différents moteurs regex ont des règles différentes sur les caractères qui doivent être échappés pour les rendre spéciaux ou doivent être échappés pour les rendre littéraux (par exemple POSIX BRE vs ERE). Vous pouvez modifier les exigences qui s'échappent à Vim sur une base par modèle en incluant une des évasions spéciales: \m, \M, \vou\V . Il existe également une 'magic'option , mais il est généralement préférable de la laisser seule, car elle a un effet global (sauf si elle est remplacée par l'un des indicateurs ci-dessus).
Chris Johnsen
1
En utilisant de la magie, cela ressemble à ceci:/\vplanet(Awesome|Terrible)
SergioAraujo
4

Pour ajouter à la réponse de Gilles, vous voudrez peut-être ajouter quelques éléments:

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

\<marque le début d'un «mot» (essentiellement alphanumérique)
\>marque la fin d'un «mot» (essentiellement alphanumérique)

asoundmove
la source