2015-05-06 36 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 

但要注意,如果你有一个包含><东西(属性,评论)将无法正常工作。