0

假设我有一个需要更改的文本:

<tag name="aaaa" value="${bbbb}"/>
<tag name="cccc" value="${dddd}"/>

我需要把它拿到表格

<tag name="bbbb" value="${bbbb}"/>
<tag name="dddd" value="${dddd}"/>

也就是说,使用里面的部分${...}value替换里面的部分name

4

3 回答 3

3

您可以使用捕获组和\zs/\ze使替换变得容易。

:%s/name="\zs[^"]*\ze" value="\${\([^}]*\)}/\1/
  • \zs\ze标记将被替换的比赛的开始和结束
  • [^"]*匹配零个或多个不匹配的字符"
  • \(...\)一个捕获组。在替换中表示为\1, \2, ...

如需更多帮助,请参阅:

:h /\zs
:h /\(
:h /[
:h :s
于 2013-07-09T18:21:35.833 回答
1

试试这个

:%s/name=".*" value="[$]{\(.*\)}"/name="\1" value="${\1}"/
于 2013-07-09T18:07:08.010 回答
0

要创建宏,请使用qa q. 然后用于@a执行宏。

qa将宏绑定到a然后您可以开始键入以记录宏。然后q再次按下停止录制宏。

因此,对于您的情况,我进入命令模式并输入:

qaf{lyf}2F"PxF"l4xq

然后@a从不同行的开头再次执行它。

您还可以jF<在最后一个 q 之前添加以自动将光标移动到下一行。然后你可以通过 10@a 链接整个宏。这将对 10 个连续的行进行编辑。

于 2013-07-09T18:24:00.173 回答