¿Cómo buscar una de las dos cadenas similares en Vim?

29

En Vim, si quiero hacer una búsqueda que coincida con "planA" o "planB", sé que puedo hacer esto:

/plan[AB]

Esto funciona porque la expresión regular permite A o B como su conjunto de caracteres.

Pero, ¿cómo puedo especificar una de las dos cadenas completas? Por ejemplo, "planetAwesome" o "planetTerrible"?

Esto coincidirá con ambos, junto con "planetAnythingHereAsLongAsItsJustLetters":

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

¿Cómo puedo hacer coincidir solo las cadenas que coinciden exactamente con "planetAwesome" o "planetTerrible"?

Nathan Long
fuente
En realidad, los corchetes crean una clase de caracteres. plan[ABC]coincide planA, planBe planCigualmente bien.
Christopher Bottoms
@molsecules: correcto, gracias. Actualicé la pregunta.
Nathan Long

Respuestas:

43
/planet\(Awesome\|Terrible\)

Para ver la documentación relevante, emitir :help /y desplazarse hacia abajo a la sección "La definición de un patrón".

Gilles 'SO- deja de ser malvado'
fuente
1
Ah! No estaba escapando de los paréntesis cuando intenté esto. Interesante: pensé que solo tenía que escapar de los caracteres literales.
Nathan Long
1
@Nathan: Varios motores de expresiones regulares tienen reglas diferentes sobre qué caracteres se deben escapar para hacerlos especiales frente a los que se deben escapar para que sean literales (por ejemplo, POSIX BRE frente a ERE). Se pueden ajustar los requisitos que escapan en Vim en función de cada patrón mediante la inclusión de uno de los escapes especiales: \m, \M, \v, o\V . También existe la 'magic'opción , pero generalmente es mejor dejarlo solo, ya que tiene un efecto global (a menos que sea anulado por uno de los indicadores anteriores).
Chris Johnsen
1
Usando mucha magia parece esto:/\vplanet(Awesome|Terrible)
SergioAraujo
4

Para agregar a la respuesta de Gilles, es posible que desee agregar algunas cosas allí:

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

\<marca el comienzo de una 'palabra' (esencialmente alfanumérica)
\>marca el final de una 'palabra' (esencialmente alfanumérica)

asoundmove
fuente