Jak wyszukać jeden z dwóch podobnych ciągów w Vimie?

29

W Vimie, jeśli chcę przeprowadzić wyszukiwanie pasujące do „planA” lub „planB”, wiem, że mogę to zrobić:

/plan[AB]

Działa to, ponieważ regex pozwala na użycie A lub B jako zestawu znaków.

Ale jak mogę określić jeden z dwóch kompletnych ciągów? Na przykład „planetAwesome” czy „planetTerrible”?

Spowoduje to dopasowanie obu tych elementów wraz z „planetAnythingHereAsLongAsItsJustLetters”:

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

Jak mogę dopasować tylko ciągi pasujące dokładnie do „planetAwesome” lub „planetTerrible”?

Nathan Long
źródło
W rzeczywistości nawiasy tworzą klasę znaków. plan[ABC]mecze planA, planBi planCrównie dobrze.
Christopher Bottoms
@molsecules - racja, dzięki. Zaktualizowałem pytanie.
Nathan Long

Odpowiedzi:

43
/planet\(Awesome\|Terrible\)

Aby wyświetlić odpowiednią dokumentację, wydaj :help /i przewiń w dół do sekcji „Definicja wzoru”.

Gilles „SO- przestań być zły”
źródło
1
Ach! Kiedy próbowałem, nie uciekałem przed nawiasami. Ciekawe - myślałem, że muszę tylko uciec od literalnych postaci.
Nathan Long
1
@Nathan: Różne silniki wyrażeń regularnych mają różne reguły dotyczące znaków, które muszą być poprzedzane znakami specjalnymi, aby były wyjątkowe, a znaki specjalne, aby były dosłowne (np. POSIX BRE vs. ERE). Można dostosować Cytowanie wymagania w vim na podstawie za wzór przy tym jeden ze specjalnych ucieczek: \m, \M, \v, lub\V . Istnieje również 'magic'opcja , ale zwykle najlepiej pozostawić ją w spokoju, ponieważ ma ona globalny efekt (chyba że zostanie zastąpiona przez jedną z powyższych flag).
Chris Johnsen
1
Używając bardzo magii, wygląda to tak:/\vplanet(Awesome|Terrible)
SergioAraujo
4

Aby dodać do odpowiedzi Gillesa, możesz dodać kilka rzeczy:

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

\<oznacza początek „słowa” (zasadniczo alfanumeryczny)
\>oznacza koniec „słowa” (zasadniczo alfanumeryczny)

asoundmove
źródło