Vim:查找和替换"&"

17
为了将当前行到后30行范围内的每个"&"替换为"&&",我发出了 :.,+30s/\\&/\\&\\&/g 命令,但 Vim 显示"未找到模式"。我使用双反斜杠“\”转义特殊字符"&"。
3个回答

13

在正则表达式的第一部分中,您不需要转义&符号。它只有在第二部分(替换)中才具有特殊含义。

您要查找的模式是“\&”,并将其替换为“\&\&”。

最简单的替换方式只需使用:

:.,+30s/&/&&/g

13

尝试不要对所有内容进行转义 - :.,+30s/&/&&/g 对我来说似乎有效。


14
澄清一下:这不是因为&不是元字符。在模式中,这是正确的(除非&被转义或启用了very-magic模式),但在替换字符串中,&表示与\0相同:整个匹配的子字符串。因为“整个匹配的子字符串”本身就是一个和号,所以这个解决方案有效。还要注意,如果关闭了“magic”选项,则语句“在替换中,&表示整个匹配的模式”在许多命令(包括:s)中是错误的。 - ZyX

4

值得注意的是,如果您需要更改&的位置,例如:_&&_,则只需在替换表达式的替换语句中转义&

:.,+30s/ &/\& /g
           ^

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接