是否可以在不转义所有花哨字符的情况下搜索作为正则表达式的字符串?
例如,我想在我的源文件中找到这个字符串:^[\d\| *]$
,不转义\
,$
等。
我只想复制并粘贴正则表达式并获得结果。
您想要的是一个搜索匹配字符串的 grep,而不是尝试匹配正则表达式。使用 GNU grep,您可以使用 -F 或 --fixed-strings 标志调用该命令,或者仅将命令作为 fgrep 调用。以下都是等价的:
grep -F '^[\d\| *]$'
grep --fixed-strings '^[\d\| *]$'
fgrep '^[\d\| *]$'
当您想要匹配表示正则表达式的代码,或者当您想要一个不需要正则表达式引擎的高级匹配功能的更快的 grep 时,您所需要的正是固定字符串搜索。
有一种简单的方法可以避免对 Vim 正则表达式中的字符进行特殊处理。说明\V
符允许将模式其余部分的解释切换到“非常nomagic”模式,这意味着除了反斜杠之外的每个字符都是按字面意思理解的。
因此,可以相应地设置最后一个搜索寄存器:
:let @/ = '\V' . escape('^[\d\| *]$', '\')
并立即使用n
andN
进行搜索。
您可以使用命令行工具fgrep
(“fast grep”),
假设您已将要搜索的正则表达式拉到默认寄存器 ( @"
),您可以这样做:
/\V<C-R><C-R>=escape(@", '/\')<CR><CR>
开始一个“非常神奇”的搜索,其中只有以反斜杠开头的\V
原子具有特殊的非字面意义。使escape()
所有包含的反斜杠无效(并转义/
,否则将结束搜索模式),因此这是纯粹的文字搜索。文本通过Ctrl+R=插入到搜索命令行中。