Как искать одну из двух похожих строк в Vim?

29

В Vim, если я хочу выполнить поиск, который соответствует «planA» или «planB», я знаю, что могу сделать это:

/plan[AB]

Это работает, потому что регулярное выражение допускает либо A, либо B в качестве набора символов.

Но как я могу указать одну из двух полных строк? Например, "planetAwesome" или "planetTerrible"?

Это будет соответствовать обоим из них, наряду с «planetAnythingHereAsLongAsItsJustLetters»:

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

Как я могу сопоставить только строки, которые точно соответствуют "planetAwesome" или "planetTerrible"?

Натан Лонг
источник
На самом деле, скобки создают класс символов. plan[ABC]соответствует planA, planBи planCодинаково хорошо.
Кристофер Боттомс
@molsecules - верно, спасибо. Я обновил вопрос.
Натан Лонг

Ответы:

43
/planet\(Awesome\|Terrible\)

Чтобы просмотреть соответствующую документацию, выполните выдачу :help /и прокрутите вниз до раздела «Определение шаблона».

Жиль "ТАК - перестань быть злым"
источник
1
Ах! Я не избежал скобок, когда попробовал это. Интересно - я думал, что мне нужно только избегать буквальных персонажей.
Натан Лонг
1
@ Натан: Различные движки регулярных выражений имеют разные правила о том, какие символы должны быть экранированы, чтобы сделать их особенными, или должны быть экранированы, чтобы сделать их буквальными (например, POSIX BRE против ERE). Вы можете настроить спасаясь требования в Vim на основе каждого шаблона путем включения одного из специальных побегов: \m, \M, \v, или\V . Существует также 'magic'опция , но обычно лучше оставить ее в покое, так как она имеет глобальный эффект (если не переопределена одним из вышеуказанных флагов).
Крис Джонсен
1
Используя очень волшебство, это выглядит так:/\vplanet(Awesome|Terrible)
SergioAraujo
4

Чтобы добавить к ответу Жиля, вы можете добавить несколько вещей:

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

\<отмечает начало слова (по существу, буквенно-цифровые символы)
\>отмечает конец слова (по существу, буквенно-цифровые символы)

asoundmove
источник