【问题标题】:How to match and substitute within pattern in VIM - How to match and substitute text within two characters VIM如何在 VIM 中的模式内匹配和替换 - 如何在两个字符 VIM 内匹配和替换文本
【发布时间】:2016-12-29 16:26:59
【问题描述】:

我有以下文字:

," abc def , qwerty ghans , ghjt bnsn 5667w !*? ",

我想将,"", 之间的逗号 匹配并替换为另一个字符(或者更好的是,删除它们)。

【问题讨论】:

  • :%s/\("\)\@<!,\("\)\@!/#/g
  • Stack Overflow 不是别人为你做的工作。你尝试过什么,你在哪里挣扎?
  • 是什么让你觉得我会在不先努力的情况下通过发布问题的麻烦?我已经尝试了很多东西,但一无所获。在这里发布所有这些毫无意义。这会使问题难以阅读。如果你觉得这个问题“懒惰”,请忽略它。
  • 我猜您也需要一个更通用的解决方案来适用于其他类似情况,但在这种特定情况下,您可以只使用:%s/ , / /g

标签: search vim match substitution


【解决方案1】:

在我看来,一个不错的方法是在可视模式下使用替代。

," 上开始视觉(使用v),使用/", 搜索结束字符以选择模式中的所有字符,然后按: 以编写一个命令,将显示以下内容::'<,'>,表示该命令将应用于所选区域。最后,:'<,'>s/,//g 就可以了。

【讨论】:

    【解决方案2】:

    插件解决方案

    我的PatternsOnText plugin 提供(除其他外):SubstituteInSearch 命令。对于您的示例,我将通过 ,"\zs.\{-}\ze", 选择文本(非贪婪),然后对其运行替换:

    :SubstituteInSearch/,"\zs.\{-}\ze",/,/X/g
    

    内置替代方案

    如果出现的次数很少,您可以选择区域,然后(@user2848844 的相关答案中缺少这个关键部分!)通过特殊的\%V atom 限制匹配:

    '<,'>s/\%V,/X/g
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-15
      • 2010-11-16
      • 2014-11-24
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2023-03-14
      相关资源
      最近更新 更多