在vim中找到完全匹配

big*_*ree 11 vim

使用/?能够在vim中找到单词的匹配项.但是我怎样才能找到完全匹配?例如,我的文本包含以下单词:a aa aaa aaaa aa和我输入/aa这将找到包含模式aa的所有字符串,但如果我想要找到确切的aa而不是aaaa aaaa什么?

Mos*_*teM 26

您将要查找的字符串括起来\<\>与之/\<aa\>匹配以完全匹配该字符串.

  • 仅当还有关键字边框时才有效;例如,它将无法在“xaax”中找到匹配项。 (2认同)

Ing*_*kat 8

要查找单个独立aa(不是a,aaa......),您需要在之前和之后断言该字符不匹配.这是通过负面的lookbehind(\@<!在Vim的正则表达式语法中)和lookahead(\@!)包含匹配本身(a\{2})来完成的:

/\%(a\)\@<!a\{2}\%(a\)\@!/
Run Code Online (Sandbox Code Playgroud)

简单化

这些断言难以输入,如果匹配周围的边界也是非关键字/关键字边界,则可以使用较短的\<\a\{2}\>断言(如MosteM的答案),但这在一般情况下不起作用,例如xaax.

  • 我会使用 `aa` 而不是 `a\{2}`。由于`a` 已经是一个(字面量)原子,我将省略分组字符:`/a\@&lt;!aaa\@&lt;!/`。看着那个欺骗性的“aaa”,我可能会认为“a\{2}”毕竟更清晰。 (2认同)