【问题标题】:vim regular expression substitution quantifiervim 正则表达式替换量词
【发布时间】:2017-09-09 12:47:11
【问题描述】:

如何量化 vim 搜索/替换表达式的替换部分?

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

将每次出现的 4 个 x 替换为 4 个 y。

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

用“y{4}”替换4个x

如何修改它,这样我就不必插入 4 个单独的 y,而是“量化”单个 y。

【问题讨论】:

    标签: regex search vim replace


    【解决方案1】:

    解决方案似乎比它的价值更麻烦:

    :%s/w\{4}/\=repeat('y',4)/g
    

    【讨论】:

    • 这正是我想要的。在我的示例中,用 4 个 y 替换 4 个 x 被简化了。我的具体问题是在我的替换子句中使用了 100 个相同的字符。感谢所有回复的人。这就是解决方案。我相信有人会这样标记它。
    • 上一个解决方案回答了我的问题。但是,让替换子句重复 4 y 后跟 find 子句中的字符(反向引用)的正确格式是什么,即如何用 4 y 和 4 x 替换 4 x?我试过 :%s/(x\{4\})/\=repeat('y',4)\1/g ... 似乎不起作用。
    • %s/\(x\{4\}\)/\=repeat('y',4).submatch(1)/g
    【解决方案2】:

    OP 写道:

    让替换子句重复 4 年的正确格式是什么 后跟 find 子句中的字符(反向引用),即 如何将 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 提供answering a similar question

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2015-02-16
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多