Osa*_*mal 12 vim replace editor
说我有以下文件
<block>
    <foo val="bar"/>
    <foo val="bar"/>
</block>
<block>
    <foo val="bar"/>
    <foo val="bar"/>
</block>
我怎么能这样做
<block>
    <foo val="bar1"/>
    <foo val="bar"/>
</block>
<block>
    <foo val="bar1"/>
    <foo val="bar"/>
</block>
有一件事我试图做的是记录一个宏用:%s/bar/bar1/gc,按y与n各一次,然后尝试编辑宏.由于某种原因,我无法编辑宏.:(
Pet*_*ker 36
只是为了表明这可以在替换中完成:
:let a = ['', '1']
:%s/bar\zs/\=reverse(a)[0]/g
在每次替换后数组在就地反转之后,bar在每个末尾替换为变量中数组的第一个元素a.
let a = ['', '1']定义一个变量a来保存我们的数组%s/.../.../ 在文件中的每一行上进行替换%s/bar\zs/.../ 在bar上进行替换,但在使用后开始替换 \zs\=在:s命令的替换部分内部使用以下表达式的值reverse(a) reverse只是反转数组,但就地就是这样reverse(a)[0] reverse返回现在反转的数组,所以得到第一个元素/g 替换行中的所有出现(可选):let a = ['a', 'b', 'c']
:%s/bar\zs/\=add(a, remove(a, 0))[-1]/g
一般情况"旋转"数组,a就地并使用数组的最后位置作为替换替换的值.
有关更多帮助请参阅
:h :s
:h range
:h /\zs
:h :s\=
:h reverse(
:h :s_flags
:h Lists
:h add(
:h remove
您可以使用
:%s/bar/bar1/gc
它会在每场比赛中询问你是否要更换它。
否则,您必须指定其中的全部内容,并将第一个栏替换为 bar1。