在vim中找到完全匹配

时间:2014-03-03 13:07:16

标签: vim

使用/?可以在vim中查找单词的匹配项。但是我怎样才能找到完全匹配? 例如,我的文字包含以下字词:a aa aaa aaaa aa我键入/aa这将找到包含模式aa的所有字符串,但如果我想要找到aa而不是{{ {1}}?

4 个答案:

答案 0 :(得分:22)

您可以将\<\>中的字符串括在/\<aa\>中,以便与该字符串完全匹配。

答案 1 :(得分:8)

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

a\{2}

简化

这些断言很难输入,如果匹配的边框也是非关键字 / 关键字边框,则可以使用较短的{{1}断言(如在MosteM的回答中),但这在一般情况下不起作用,例如与/\%(a\)\@<!a\{2}\%(a\)\@!/

答案 2 :(得分:1)

您可以搜索aa[^a],这将找到您的两个a,而不是其他内容。

编辑:哦,男孩,你们都是在完全匹配之后:-)所以,恰好匹配两个aa s而不是其他:

[^a]\zsaa\ze[^a]\|^\zsaa\ze$\|^\zsaa\ze[^a]\|[^a]\zsaa\ze$

分支扩大了:

  [^a]\zsaa\ze[^a]
\|^\zsaa\ze$
\|^\zsaa\ze[^a]
\|[^a]\zsaa\ze$

这些涵盖所有意外情况 - aa可以位于任何行的开头,中间或末尾。并且一起不能超过两个a

  • \zs表示实际匹配从此处开始
  • \ze表示实际匹配在此处结束
  • 第一个分支在由其他字符包围的行中找到aa
  • 第二个分支在构成整个行时找到aa
  • 第三个分支在行的开头找到aa
  • ,第四个分支在一行的末尾找到aa

我的思绪令人难以置信,就像后面的断言一样,所以我试图坚持使用相当简单的正则表达式概念。

编辑2:请参阅@ benjifisher的简化,更优雅的版本below,以获得您的智慧。

答案 3 :(得分:0)

将光标移至要搜索的确切字词。

按*(Shitf + 8或键盘的小键盘)。