使用/
或?
可以在vim中查找单词的匹配项。但是我怎样才能找到完全匹配?
例如,我的文字包含以下字词:a aa aaa aaaa aa
我键入/aa
这将找到包含模式aa的所有字符串,但如果我想要找到aa
而不是{{ {1}}?
答案 0 :(得分:22)
您可以将\<
和\>
中的字符串括在/\<aa\>
中,以便与该字符串完全匹配。
答案 1 :(得分:8)
要查找单个独立aa
(不是a
,aaa
,...),您需要在之前和之后断言该字符不匹配。这是通过负面的 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或键盘的小键盘)。