【问题标题】:vim: replace a line pattern by a no linevim:用空行替换行模式
【发布时间】:2011-05-05 08:45:32
【问题描述】:

我正在尝试在 vim 上实现一个简单的替换,但无法正确完成。我需要在整个文件上删除与模式匹配的所有行。模式是“something*”,意思是“something”后跟任何东西,直到行尾。 我尝试了:%s/pattern*\n//g:%s/pattern*$//g,但没有成功。 有什么想法吗?

干杯!

【问题讨论】:

  • 仅供参考:* 适用于模式中的前一个字符,因此在您的情况下,它将匹配零个或多个 n。
  • 对,我总是对 shell 扩展字符感到困惑:/

标签: regex vim


【解决方案1】:

使用:g 代替:substitute

:g/pattern/d

将删除所有与模式匹配的行。

至于模式,你的将匹配patterpatternpatternn 等等。使用通配符 . 匹配任何字符。所以你的正则表达式应该是pattern.*$ --- 但是如果你想完全删除这些行,:g/pattern/d 就可以了。

【讨论】:

  • 谢谢,正是我要找的,要习惯阅读更多手册! ;)
  • @brafales,是的。 :gex 魔法的另一半。 :) 一个真正的隐藏强者,可以做有趣的把戏。
  • 添加一个:g/pattern/d _(注意下划线)的作用与s/.*pattern.*\n\=//g 相同,而您的版本将破坏未命名、编号 (1-9) 以及可能的其他一些值注册。
【解决方案2】:

根据您使用的vim 的版本,您可能对我要提出的建议有疑问:

:%s/pattern.*^V^M//g

对于^V,直接按ctrl-v,然后按ENTER (^M) 键。 ^V 允许您输入文字字符,而无需解释该字符。

【讨论】:

  • 点表示«除换行符以外的任何符号»,因此无需使用此类集合。
猜你喜欢
  • 2019-05-23
  • 2013-12-28
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
相关资源
最近更新 更多