Vim正则表达式替换量词

3
如何量化vim搜索/替换表达式的替换部分?
:%s/x\{4\}/yyyy/g 

这段代码会将每个4个x的组合替换为4个y。

:%s/x\{4\}/y\{4\}/g 

将4个x替换为"y{4}"

如何修改以避免插入4个单独的y,而是“量化”一个单一的y。

2个回答

4
解决方案似乎比它的价值更麻烦:
:%s/w\{4}/\=repeat('y',4)/g

这正是我一直在寻找的。我的例子,将4个x替换为4个y变得简单了。我的具体问题是在替换语句中使用了100个相同的字符。感谢所有回复的人。这就是解决方案。我相信会有人将其标记为这样的解决方案。 - Amalafrida
之前的解决方案回答了我的问题。然而,正确的格式是什么,以获得替换子句重复4个y和查找子句中的字符(反向引用),即如何用4个y和4个x替换4个x? 我尝试过:%s/(x{4})/=repeat('y',4)\1/g ……似乎不起作用。 - Amalafrida
%s/\(x\{4\}\)/\=repeat('y',4).submatch(1)/g - Jim U

0

OP 写道:

正确的格式是什么,以便在查找子句(反向引用)中重复 4 个 y 的字符后跟随替换子句,即如何用 4 个 x 替换为 4 个 y

回答

将所有出现的 xxxx 替换为四个 y,后面跟着一个反向引用

%s/\(x\{4\}\)/\=repeat('y',4).submatch(1)/g

之前

hello xxxx there xxxx end

之后

hello yyyyxxxx there yyyyxxxx end

感谢@romainl提供的原始答案,以及@Ingo Karkat回答类似问题的帮助


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