Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 我需要如何在vim中转义搜索字符串?_Regex_Vim - Fatal编程技术网

Regex 我需要如何在vim中转义搜索字符串?

Regex 我需要如何在vim中转义搜索字符串?,regex,vim,Regex,Vim,我需要搜索并替换此: ExecIf($["${debug}" = "1"]?NoOp 为此: GoSub(chanlog,s,1(1,[${CHANNEL}] 我似乎无法在vim中实现这一点,我也不确定需要逃避什么,因为我尝试过的方法都不管用 如果要更改包含大量标点字符的长字符串,并且该字符串是完全匹配的(您不希望它们中的任何一个被视为正则表达式语法),可以使用nomagic选项,将搜索模式解释为文字字符串 :set nomagic :%s/ExecIf($["${debug}" = "1

我需要搜索并替换此:

ExecIf($["${debug}" = "1"]?NoOp
为此:

GoSub(chanlog,s,1(1,[${CHANNEL}] 

我似乎无法在vim中实现这一点,我也不确定需要逃避什么,因为我尝试过的方法都不管用

如果要更改包含大量标点字符的长字符串,并且该字符串是完全匹配的(您不希望它们中的任何一个被视为正则表达式语法),可以使用
nomagic
选项,将搜索模式解释为文字字符串

:set nomagic
:%s/ExecIf($["${debug}" = "1"]?NoOp/GoSub(chanlog,s,1(1,[${CHANNEL}]/
:set magic

您仍然需要注意分隔符(
s///
命令的斜线),但您可以使用任何字符,它不必是斜线,因此当您有类似的内容,并且搜索或替换字符串中有斜线时,只需选择其他内容,像
s@foo@bar@
s:bar:baz:
如果您在vim替换(:s/)中转义哪些字符时遇到问题,请记住
nomagic
概念,尤其是替换::snomagic//或:sno//的
nomagic
版本
nomagic
意思是:逐字解释每个字符

因此,这应该可以工作,而不必担心替换中的转义字符:

:sno/ExecIf($["${debug}" = "1"]?NoOp/GoSub(chanlog,s,1(1, [${CHANNEL}]/
了解魔法与游牧,:sno//和\v\v:

搜索字符串的nomagic版本使用
\V

/\VExecIf($["${debug}" = "1"]?NoOp

您必须转义
[]
和空格:

:s/ExecIf($\["${debug}"\ =\ "1"\]?NoOp/GoSub(chanlog,s,1(1,\[${CHANNEL}\]/

只是一点点尝试和错误

我试着用
sno/…
,bt得到了同样的结果;它说没有找到模式。人力资源部首先确保我们两人都没有打字错误。然后用
打开
incsearch
:设置incsearch
,然后开始键入nomatic搜索:
/\VExecIf
。。。确保你的文件中有匹配项。还有,神奇的替代品(逃离第一个
[
)对你有用吗?
:s/ExecIf($\["${debug}"\ =\ "1"\]?NoOp/GoSub(chanlog,s,1(1,\[${CHANNEL}\]/