我需要搜索和替换这个:
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@
or s:bar:baz:
。
如果您在 vim 替换 ( :s//) 中对哪些字符进行转义时遇到问题,请记住这个nomagic
概念,尤其是nomagic
替换的版本::snomagic//或:sno//. nomagic
意思是:从字面上解释每个字符。
所以这应该可以工作,而不必担心替换中的转义字符:
:sno/ExecIf($["${debug}" = "1"]?NoOp/GoSub(chanlog,s,1(1, [${CHANNEL}]/
了解魔术与游牧:sno//,和\v,\V:
:help magic
搜索字符串的 nomagic 版本使用\V
:
/\VExecIf($["${debug}" = "1"]?NoOp
你必须逃避[]
和 空格:
:s/ExecIf($\["${debug}"\ =\ "1"\]?NoOp/GoSub(chanlog,s,1(1,\[${CHANNEL}\]/
只是一点点试错