2015-05-06 67 views
0

我似乎無法找到在vim中替換範圍[A-Za-z0-9]的資源。vim正則表達式搜索和替換範圍[a-z] +等

這裏是我的榜樣......

搜索:

<h4>Text in Markup</h4> 

後替換:

<h4><%= _t('Text in Markup') %></h4> 

我試圖做這樣的事情在Vim的7.4

:s/>([a-zA-Z\s]+)</><%= _t('$1') %></g 
以下

任何su關於如何實現這一目標的想法?

回答

1

是的,試試這個:

:s/\m<\(\w\+\)[^>]*>\zs[^<]\+\ze<\/\1>/<%= _t('&') %>/g 

解密:

  • s/.../.../g - 代替所有的當前行
  • \m - 打開 「神奇」 正則表達式語法
  • \(...\) - 分組
  • \w\+ - one or mor e字字符
  • [^>]* - 零個或多個不是 - >個字符(即,跳過屬性)
  • \zs...\ze - 一個或多個不可─<字符
  • <\/\1> - - 關閉標籤匹配開一個
  • & - 無論是\zs之間匹配的只有什麼是這些點
  • [^<]\+之間的匹配替換\ze
0

一個非常簡單的解決辦法:

:s/>\([^<]\+\)/><%= _t('\1') %></g 

但要注意,如果你有一個包含><東西(屬性,評論)將無法正常工作。