2016-01-31 24 views
0

我想確定我的HAML代碼,所以我需要將每個:word => text更改爲word: text如何使用正則表達式替換Vim

一些例子:

  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

但不幸的是,這並沒有做我上面描述的。

+0

你可以發佈一些更具體的輸入示例和預期的輸出替換嗎?目前還不清楚''''從你的例子':word =>''的位置,因爲它在你的正則表達式嘗試中沒有被解決 –

+0

如果你把例子放到他們的行的上下文中,而不僅僅是要匹配的模式更換。 –

+0

@MichaelBerkowski我編輯了這個問題。 –

回答

1

試試這個:

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

或者,具有非常魔法模式使用更少的反斜槓:

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

\2保留空白到=>權在一定程度上半心半意試圖在變化後讓事情排好隊。

+0

工作,但冒號後有一個額外的空格,即'style:(double spaces)text'。 –

+0

另外它不能在第二個字符串上工作,如果這行是這樣的:{:align =>'center',:style =>'padding:27px 0;'}'。它只是取代第一個':align =>',並保留':style =>'原樣。 –

+0

如果你在一行上有多個key =>值對,那麼你需要替代命令末尾的'/ g'。添加。 –