我需要搜索并替换它:
ExecIf($["${debug}" = "1"]?NoOp
用这个:
GoSub(chanlog,s,1(1,[${CHANNEL}]
我似乎无法在vim中执行此操作,而且我不确定需要进行哪些操作,因为我尝试过的任何工作都没有。
答案 0 :(得分:3)
如果要更改包含大量标点字符的长字符串,并且它是完全匹配(您不希望它们中的任何一个被视为正则表达式语法),您可以使用nomagic
选项,将搜索模式解释为文字字符串。
:set nomagic
:%s/ExecIf($["${debug}" = "1"]?NoOp/GoSub(chanlog,s,1(1,[${CHANNEL}]/
:set magic
你仍然需要注意分隔符(s///
命令的斜杠),但是你可以使用任何字符,它不一定是斜线,所以当你有这样的东西时并且搜索或替换字符串中有斜杠,只需选择其他内容,例如s@foo@bar@
或s:bar:baz:
。
答案 1 :(得分:2)
如果你在vim替换中遇到哪些字符有问题(:s // ),请记住nomagic
概念,特别是nomagic
替代版本::snomagic // 或:sno // 。 nomagic
表示:按字面解释每个字符。
所以这应该可以工作,而不必担心在替换中转义字符:
:sno/ExecIf($["${debug}" = "1"]?NoOp/GoSub(chanlog,s,1(1, [${CHANNEL}]/
了解魔法与nomagic,:sno // , \ v , \ V :
:help magic
字符串的搜索的nomagic版本使用\V
:
/\VExecIf($["${debug}" = "1"]?NoOp
答案 2 :(得分:1)
你必须逃离[]
和空格:
:s/ExecIf($\["${debug}"\ =\ "1"\]?NoOp/GoSub(chanlog,s,1(1,\[${CHANNEL}\]/
只是有点反复试验