如何在Vim中搜索两个相似的字符串之一?


29

在Vim中,如果我想进行匹配“ planA”或“ planB”的搜索,我知道我可以这样做:

/plan[AB]

之所以有效,是因为正则表达式允许A或B作为其字符集。

但是,如何指定两个完整字符串之一?例如,“ planetAwesome”或“ planetTerrible”?

这将与“ planetAnythingHereAsLongAsItsJustLetters”一并匹配:

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

如何匹配完全匹配“ planetAwesome”或“ planetTerrible”的字符串?


实际上,方括号会创建一个字符类。plan[ABC]匹配planA,,效果planBplanC一样。
Christopher Bottoms

@molsecules-对,谢谢。我更新了问题。
内森·朗

Answers:


43
/planet\(Awesome\|Terrible\)

要查看相关文档,请发出:help /,并向下滚动到“模式的定义”部分。


1
啊! 尝试此操作时,并没有转义括号。有趣的是-我以为我只需要转义文字即可。
内森·朗

1
@Nathan:各种正则表达式引擎有不同的规则,即必须转义哪些字符以使它们变得特殊,而必须转义哪些字符以使它们成为文字(例如POSIX BRE与ERE)。您可以通过特殊的一条逃生调整中的Vim在每个模式的基础上逃逸的要求:\m\M\v,或\V。还有一个'magic'选项,但是通常最好将其保留,因为它具有全局作用(除非被上述标志之一覆盖)。
克里斯·约翰森,

1
使用非常神奇的方法看起来像是这样:/\vplanet(Awesome|Terrible)
SergioAraujo,2017年

4

要添加到Gilles的答案中,您可能需要在其中添加一些内容:

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

\<标记“单词”的开头(基本上是字母数字)
\>标记“单词”的结尾(基本上是字母数字)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.