我似乎无法在vim中找到更换像[A-Za-z0-9]这样的范围的资源。
这是我的例子......
搜索:
<h4>Text in Markup</h4>
更换后:
<h4><%= _t('Text in Markup') %></h4>
我正在尝试在Vim 7.4中执行以下操作
:s/>([a-zA-Z\s]+)</><%= _t('$1') %></g
有关如何实现这一目标的任何建议吗?
答案 0 :(得分:1)
是的,试试这个:
:s/\m<\(\w\+\)[^>]*>\zs[^<]\+\ze<\/\1>/<%= _t('&') %>/g
解密:
s/.../.../g
- 替换所有当前行\m
- 启用“魔术”正则表达式语法\(...\)
- 分组\w\+
- 一个或多个单词字符[^>]*
- 零个或多个不 - >
个字符(即跳过属性)\zs...\ze
- 仅替换这些点之间匹配的内容[^<]\+
- 一个或多个不是 - <
字符<\/\1>
- 结束标记与开头的匹配&
- \zs
和\ze
之间匹配的内容。答案 1 :(得分:0)
非常简单的解决方案:
:s/>\([^<]\+\)/><%= _t('\1') %></g
但请注意,如果您拥有包含>
或<
的内容(属性,评论),则无效。