Como procurar por uma das duas seqüências semelhantes no Vim?


29

No Vim, se eu quiser fazer uma pesquisa que corresponda a "planA" ou "planB", sei que posso fazer isso:

/plan[AB]

Isso funciona porque o regex permite A ou B como seu conjunto de caracteres.

Mas como posso especificar uma das duas seqüências completas? Por exemplo, "planetAwesome" ou "planetTerrible"?

Isso corresponderá a ambos, junto com "planetAnythingHereAsLongAsItsJustLetters":

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

Como posso corresponder apenas as strings que correspondem exatamente a "planetAwesome" ou "planetTerrible"?


Na verdade, os colchetes criam uma classe de personagem. plan[ABC]corresponde planA, planBe planCigualmente bem.
Christopher Bottoms

@molsecules - certo, obrigado. Eu atualizei a pergunta.
Nathan Long

Respostas:


43
/planet\(Awesome\|Terrible\)

Para ver a documentação relevante, emitir :help /e role para baixo até a seção "A definição de um padrão".


1
Ah! Eu não estava escapando dos parênteses quando tentei isso. Interessante - eu pensei que só tinha que escapar de caracteres literais.
Nathan Long

1
@ Nathan: Vários mecanismos de regex têm regras diferentes sobre quais caracteres devem ser escapados para torná-los especiais vs. devem ser escapados para torná-los literais (por exemplo, POSIX BRE vs. ERE). Você pode ajustar os requisitos escapando no vim em uma base per-padrão, incluindo um dos escapes especiais: \m, \M, \v, ou\V . Também existe a 'magic'opção , mas geralmente é melhor deixá-la em paz, pois ela tem efeito global (a menos que seja substituída por uma das sinalizações acima).
Chris Johnsen

1
Usando muito mágica parece que isso:/\vplanet(Awesome|Terrible)
SergioAraujo

4

Para adicionar à resposta de Gilles, você pode adicionar algumas coisas:

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

\<marca o início de uma 'palavra' (essencialmente alfanumérica)
\>marca o fim de uma 'palavra' (essencialmente alfanumérica)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.