vi 替换匹配

vi 替换匹配

我能够对 中的正则表达式进行模式匹配vi,但当我添加替换字符串时,vi认为这是正则表达式匹配的一部分。尽管使用了各种不同的分隔符,但仍然会发生这种情况。有什么方法可以避免这种情况吗?例如,以下命令匹配并删除所需的字符串(\a{b}[c]):

s:\\a{b}[c\]

但是,如果我添加替换字符串,

s:\\a{b}[c\]:abc

我收到错误

E486: Pattern not found: \\a{b}[c\]:abc

vi因此无法识别将查询正则表达式与替换字符串分隔开的分隔符。这种情况发生在各种不同的分隔符/分隔符中。我如何确保vi正确区分正则表达式模式和替换字符串?

答案1

左括号 ([) 开始一个集合,或一组将与其任意一个成员匹配的字符。集合以右括号 (]) 结束,但您在模式中已使用反斜杠转义右括号,因此将左括号右侧的vi所有内容视为集合中。

如果要匹配文字左括号,则必须使用反斜杠将其转义。如果您想要创建一个包含c和 的集合\,则需要使用反斜杠转义\。换句话说,您的替代命令可能应该看起来像这样

s:\\a{b}\[c\]:abc

或者像这样:

s:\\a{b}[c\\]:abc

相关内容