Wie kann man in Vim nach einer von zwei ähnlichen Zeichenfolgen suchen?

29

Wenn ich in Vim eine Suche durchführen möchte, die mit "planA" oder "planB" übereinstimmt, weiß ich, dass ich dies tun kann:

/plan[AB]

Dies funktioniert, weil der reguläre Ausdruck entweder A oder B als Zeichensatz zulässt.

Aber wie kann ich eine von zwei vollständigen Zeichenfolgen angeben? Zum Beispiel "planetAwesome" oder "planetTerrible"?

Dies wird mit beiden übereinstimmen, zusammen mit "planetAnythingHereAsLongAsItsJustLetters":

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

Wie kann ich nur Zeichenfolgen zuordnen, die genau mit "planetAwesome" oder "planetTerrible" übereinstimmen?

Nathan Long
quelle
Tatsächlich bilden die Klammern eine Zeichenklasse. plan[ABC]Streichhölzer planA, planBund planCebenso gut.
Christopher Bottoms
@molsecules - richtig, danke. Ich habe die Frage aktualisiert.
Nathan Long

Antworten:

43
/planet\(Awesome\|Terrible\)

Um die relevante Dokumentation anzuzeigen :help /, geben Sie ein und scrollen Sie zum Abschnitt „Die Definition eines Musters“.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Ah! Ich bin den Klammern nicht entgangen, als ich das ausprobiert habe. Interessant - ich dachte, ich müsste nur buchstäblichen Zeichen entkommen.
Nathan Long
1
@ Nathan: Verschiedene Regex-Engines haben unterschiedliche Regeln darüber, welche Zeichen maskiert werden müssen, um sie zu etwas Besonderem zu machen. Sie können die entweichenden Anforderungen in Vim zwicken auf einer Pro-Muster Basis von einem der speziellen entkommen einschließlich: \m, \M, \v, oder\V . Es gibt auch die 'magic'Option , aber es ist normalerweise am besten, sie in Ruhe zu lassen, da sie globale Auswirkungen hat (sofern sie nicht von einem der oben genannten Flags überschrieben wird).
Chris Johnsen
1
Mit sehr viel Magie /\vplanet(Awesome|Terrible)
sieht
4

Um Gilles 'Antwort zu ergänzen, möchten Sie vielleicht ein paar Dinge hinzufügen:

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

\<markiert den Anfang eines Wortes (im Wesentlichen alphanumerisch)
\>markiert das Ende eines Wortes (im Wesentlichen alphanumerisch)

asoundmove
quelle