Search 如何在Vim中搜索包含正则表达式的字符串?

Search 如何在Vim中搜索包含正则表达式的字符串?,search,vim,Search,Vim,是否可以搜索正则表达式字符串,而不转义所有奇特的字符 例如,我希望在源文件中找到此字符串:^[\d\\\*]$,而不转义\,$,等等 我只想复制并粘贴正则表达式并获得结果。您可以使用命令行工具fgrep(“快速grep”),您需要的是搜索匹配字符串的grep,而不是尝试匹配正则表达式。使用GNUGREP,您可以使用 -F或--fixed strings标志,或者只作为fgrep调用命令。以下各项均相当: grep -F '^[\d\| *]$' grep --fixed-strings '^[\

是否可以搜索正则表达式字符串,而不转义所有奇特的字符

例如,我希望在源文件中找到此字符串:
^[\d\\\*]$
,而不转义
\
$
,等等


我只想复制并粘贴正则表达式并获得结果。

您可以使用命令行工具
fgrep
(“快速grep”),

您需要的是搜索匹配字符串的grep,而不是尝试匹配正则表达式。使用GNUGREP,您可以使用 -F或--fixed strings标志,或者只作为fgrep调用命令。以下各项均相当:

grep -F '^[\d\| *]$'
grep --fixed-strings '^[\d\| *]$'
fgrep '^[\d\| *]$'

当您想要匹配表示正则表达式的代码时,或者当您想要更快的grep而不需要正则表达式引擎的高级匹配功能时,固定字符串搜索正是您所需要的。

假设您已将要搜索的regexp拉入默认寄存器(
@“
),您可以执行以下操作:

/\V<C-R><C-R>=escape(@", '/\')<CR><CR>
/\V=escape(@“,“/\”)

\V
启动了一个“非常随意”的搜索,其中只有以反斜杠开头的原子才具有特殊的非文字意义。
escape()
使所有包含的反斜杠无效(并将
/
转义,否则将结束搜索模式),因此这是纯文字搜索。文本通过Ctrl+R=插入搜索命令行。

有一种简单的方法可以避免对字符进行特殊处理 在Vim正则表达式中。
\V
说明符允许切换 将该模式的其余部分解释为“非常游牧”模式, 这意味着除反斜杠外的每个字符都可以理解 真的

因此,可以相应地设置最后一个搜索寄存器:

:let @/ = '\V' . escape('^[\d\| *]$', '\')

并使用
n
n
立即进行搜索。

“我想复制/粘贴正则表达式并得到结果”——这是什么意思?为什么你如此反对转义特殊字符?@TimPote我想从源文件复制一个正则表达式并搜索这些字符。我想键入
:/
并粘贴复制的正则表达式。@TimPote我不反对转义特殊字符。给出的例子非常简单。当你有一个复杂的正则表达式,不得不逃避特殊字符时,这是痛苦的。你永远不知道你是否犯了错误,或者你正在寻找的正则表达式不在文件中。是的,当我明白你所说的“复制/粘贴正则表达式”是什么意思时,我明白了你为什么不想转义这些字符。您看过vim的
非常正常的
\V
)选项了吗?这将使你更接近一个解决方案,尽管它不能解决必须避开反斜杠的问题。我发现这个问题很有趣,并尝试了一下。我找到了\V选项。但至少在某种程度上,
|
似乎仍然具有魔力。使用
/\V^[\d\|*]$
进行搜索时,请将搜索光标放在空格上。建议的命令并不适用于所有情况。当要搜索的文本包含反斜杠时,它们不会转义,因此可能具有非字面意义。当默认寄存器包含
\d
时,请尝试使用该命令。它将查找十进制数字,而不是反斜杠后面跟字母“d”,正如它应该查找的那样。@ib:Doh,你是对的。命令中省略了反斜杠。我已经编辑了我的答案。实现我们目标的方法不止一种:-)谢谢!