假设我有一个需要更改的文本:
<tag name="aaaa" value="${bbbb}"/>
<tag name="cccc" value="${dddd}"/>
我需要把它拿到表格
<tag name="bbbb" value="${bbbb}"/>
<tag name="dddd" value="${dddd}"/>
也就是说,使用里面的部分${...}
来value
替换里面的部分name
。
假设我有一个需要更改的文本:
<tag name="aaaa" value="${bbbb}"/>
<tag name="cccc" value="${dddd}"/>
我需要把它拿到表格
<tag name="bbbb" value="${bbbb}"/>
<tag name="dddd" value="${dddd}"/>
也就是说,使用里面的部分${...}
来value
替换里面的部分name
。
您可以使用捕获组和\zs
/\ze
使替换变得容易。
:%s/name="\zs[^"]*\ze" value="\${\([^}]*\)}/\1/
\zs
并\ze
标记将被替换的比赛的开始和结束[^"]*
匹配零个或多个不匹配的字符"
\(...\)
一个捕获组。在替换中表示为\1
, \2
, ...如需更多帮助,请参阅:
:h /\zs
:h /\(
:h /[
:h :s
试试这个
:%s/name=".*" value="[$]{\(.*\)}"/name="\1" value="${\1}"/
要创建宏,请使用qa
q
. 然后用于@a
执行宏。
qa
将宏绑定到a
然后您可以开始键入以记录宏。然后q
再次按下停止录制宏。
因此,对于您的情况,我进入命令模式并输入:
qaf{lyf}2F"PxF"l4xq
然后@a
从不同行的开头再次执行它。
您还可以jF<
在最后一个 q 之前添加以自动将光标移动到下一行。然后你可以通过 10@a 链接整个宏。这将对 10 个连续的行进行编辑。