【问题标题】:How to replace with Vim using regex如何使用正则表达式替换为 Vim
【发布时间】:2016-01-31 11:54:38
【问题描述】:

我正在尝试美化我的 HAML 代码,因此我需要将每个 :word => text 更改为 word: text

更多示例:

  1. :align => text 应该是 align: text
  2. :style => 'display: block;font-family: Arial' 应该是 style: 'display: block;font-family: Arial'

我尝试用 Vim 正则表达式来做这件事,这里是我用来替换的:

:%s /:\w*\s=>/\1:\w/g

但不幸的是,这并没有达到我上面描述的效果。

【问题讨论】:

  • 您能否发布一些更具体的输入示例和预期的输出替换?目前尚不清楚 ' 与您的示例 :word => ' 的出处,因为它在您的正则表达式尝试中没有得到解决
  • 如果您将示例放入其行的上下文中,而不仅仅是匹配和替换的模式,这将有所帮助。
  • @MichaelBerkowski 我编辑了这个问题。

标签: regex vim macvim


【解决方案1】:

试试这个:

:%s/:\(\w\+\)\s*=>\(\s*\)/\1:\2/g

或者,使用非常神奇的模式来使用更少的反斜杠:

:%s/\v:(\w+)\s*\=\>(\s*)/\1:\2/g

\2 保留了=> 右侧的空白,有点半心半意地尝试在更改后保持对齐。

【讨论】:

  • 工作但冒号后面有一个额外的空格,即style: (double spaces) text
  • 如果行是这样的{:align => 'center', :style => 'padding: 27px 0;'},它也不适用于第二个字符串。它只是替换第一个 :align => 并保持 :style => 不变。
  • 如果一行中有多个 key=>value 对,则需要在替换命令的末尾添加 /g。已添加。
  • 感谢它,它运行良好,我从中学到了一些新东西。
猜你喜欢
  • 2012-04-27
  • 2017-09-09
  • 1970-01-01
  • 2023-03-23
  • 2021-07-08
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
相关资源
最近更新 更多