【问题标题】:how to substitute continous same words with one word in vim?如何用vim中的一个单词替换连续的相同单词?
【发布时间】:2014-01-18 23:14:28
【问题描述】:

我想在vim中用一个单词替换连续的相同单词,也就是说只保留一个单词,用kitty替换kitty kitty,用world替换world world,等等。

为什么我在 vim 中的正则表达式是错误的?

:%s/\<\(\w+\)\>\s\1/\1/g  

【问题讨论】:

  • 你好,在你得到原文的答案后改变问题不好。
  • 回答您的子问题(您可以将其作为对我的回答的评论)- 您可以使用\(\1\s*\)\+ 重复部分匹配。

标签: regex vi


【解决方案1】:

+ 需要在 vim 正则表达式中转义。

:%s/\<\(\w\+\)\>\s\1/\1/g

您可以通过使用\v 开关启用magic mode 来减少转义量。

:%s/\v<(\w+)>\s\1/\1/g

Magic 相当多地改变了 vim 正则表达式的语法。请务必阅读文档。尤其是在较长的、包含元字符的正则表达式中,它可以提高长度和可读性。

【讨论】:

  • 为什么:%s/\&lt;\(\w\+\)\&gt;\(\s\+\1\)\+/\1/gc 不能用kitty 代替kitty kitty kitty kitty\(\1\s*\)\+ 不能代表重复部分匹配。
  • \v&lt;(\w+)&gt;\s+(\1\s*)+ 适合我(这正是我推荐的,仅适用于\v
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多