VIM:如何用不同的值替换字符串的每个实例

时间:2016-10-08 07:20:13

标签: regex vim text text-editor

我们说我有一些代码:

divide(int x) {
int a = 0;
a += x;
}

subtract(int x) {
int b = 0;
b += x;
}

multiply(int x) {
int c = 0;
c += x;
}

我正在使用VIM,我希望能够使用vim命令行按顺序搜索并替换每个+ =和{'/=', '-=', '*='}的实例。 我想使用:%s/+=/...,但我不确定如何使用<div class="col-md-6"> <iframe width="100%" height="100%" src="https://www.youtube.com/embed/C0DPdy98e4c?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe> </div>

我还想过在this这样的vim中使用python,但如果可能的话,我更希望在VIM中使用更简单的解决方案。

2 个答案:

答案 0 :(得分:2)

如果您的所有+=出现在不同的行上:

:let c=0 | g/\m+=/ s!\m+=!\=['/=', '-=', '*='][c%3]! | let c+=1

如果同一行上可能有多个+=

:fu! Cycle() | let c+=1 | return ['/=', '-=', '*='][c%3] | endf
:let c=-1 | %s/\m+=/\=Cycle()/g

参考文献:

  • :h :global
  • :h s/\=

答案 1 :(得分:1)

这是@ SatoKatsura的答案的缩写。它首先定义一个替换列表,然后使用:help sub-replace-expression删除列表的第一个元素。

:let replacements = ['/=', '-=', '*='] | %s#+=#\=remove(replacements, 0)#

如果有超过3个替换,并且您想重复替换,请使用:

:let replacements = ['/=', '-=', '*='] | %s#+=#\=add(replacements, remove(replacements, 0))[-1]#