Як шукати одну з двох подібних рядків у 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
@Nathan: У різних движках регулярних виразів є різні правила щодо того, які символи потрібно уникати, щоб зробити їх спеціальними проти, їх слід уникати, щоб зробити їх буквальними (наприклад, POSIX BRE проти ERE). Ви можете налаштувати рятуючись вимоги в Vim на основі кожного шаблону шляхом включення одного зі спеціальних пагонів: \m, \M, \v, або\V . Також є 'magic'варіант , але, як правило, краще залишити його в спокої, оскільки він має глобальний ефект (якщо тільки це не буде відмінено одним із вищевказаних прапорів).
Кріс Джонсен

1
Використовуючи дуже магію, здається так:/\vplanet(Awesome|Terrible)
SergioAraujo

4

Щоб додати відповідь Гілла, ви можете додати кілька речей:

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

\<позначає початок слова (по суті буквено-цифрові
\>знаки ) означає кінець слова (по суті буквено-цифрові слова)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.