如何在Vim中进行类似于"grep -w"的全字搜索

46 vim grep

如何grep -w在Vim中进行全字搜索,它只返回所需字符串是整个单词而不是较大单词的一部分的行?

grep -w :仅选择包含构成整个单词的匹配项的行.

这可以在Vim中完成吗?

rom*_*inl 58

\<bar\>
Run Code Online (Sandbox Code Playgroud)

匹配,bar但既不是foobar也不barbazfoobarbaz.

在替换中使用它像这样:

:s/\<bar\>/baz
Run Code Online (Sandbox Code Playgroud)

像这样用它来列出包含整个单词的所有行bar:

:g/\<bar\>
Run Code Online (Sandbox Code Playgroud)

:h pattern 读起来不错.

  • @mekb,它与正则表达式的工作方式以及 ASCII 中可用字符的范围有关。模式可以像“匹配刺痛‘abc’”一样基本,也可以像……嗯……任何你能想到的一样复杂。由于语法必须限制为仅使用可打印的 ASCII 字符,并且所有这些字符都可能出现在原始文本中,并且所有这些字符都可以被搜索,因此需要一种将字符与元字符分开的机制。`&lt;` 本身是一个可以匹配的字面 `&lt;` 字符,但在前面加上 `\\`,它就成为一个表示“单词开头”的元字符。 (2认同)

And*_*ter 23

你想要的/\<yourword\>.

如果你的光标在一个单词上,那么你可以按*,它将只进行单词搜索光标下的单词.


rns*_*nso 6

可以使用'very-magic'\ v简化命令:

/\v<yourword>
Run Code Online (Sandbox Code Playgroud)

如评论中所述,\v表示所有字母数字字符都有特殊含义,因此只需要输入<>而不必使用\<和来转义它们\>