vim用vim中同一行的其他部分替换文本

时间:2013-07-09 18:01:14

标签: vim

假设我有需要更改的文字:

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

我需要将其添加到表单

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

即,使用${...}的{​​{1}}内的部分替换value内的部分。

3 个答案:

答案 0 :(得分:3)

您可以使用捕获组和\zs / \ze来轻松替换。

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

如需更多帮助,请参阅:

:h /\zs
:h /\(
:h /[
:h :s

答案 1 :(得分:1)

试试这个

:%s/name=".*" value="[$]{\(.*\)}"/name="\1" value="${\1}"/

答案 2 :(得分:0)

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

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

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

qaf{lyf}2F"PxF"l4xq

然后@a从另一条线的开头再次执行它。

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