如何在一个命令中复制匹配模式的行,并修改第二行?

sda*_*iel 3 vi vim

我正在尝试使用VIM作为编辑器向java类添加属性.因此,我认为我可以使用命令来简化我的工作,使用所有样板代码.例如:

所有包含"atributeA"的行,就像这一行一样

this.attributeA=attributeA //basic constructor
Run Code Online (Sandbox Code Playgroud)

应该变成

this.attributeA=attributeA //basic constructor
this.attributeB=attributeB //basic constructor
Run Code Online (Sandbox Code Playgroud)

可能吗?

198*_*983 6

将解决方案作为一个单线程作为要求似乎有点奇怪,因为如果您愿意,您可以将任何按键序列或任何函数或命令分配给Vim中的按键.

话虽如此,这种类型的东西是Vi的面包和黄油.尝试:

:g/attributeA/ copy . | s//attributeB/g
Run Code Online (Sandbox Code Playgroud)

哪里

:g/pattern/ command1 | command2 | ...
Run Code Online (Sandbox Code Playgroud)

在每一行匹配上执行命令pattern(参见参考资料:help :global),

copy .
Run Code Online (Sandbox Code Playgroud)

复制当前行(请参阅:help :copy)与:g地址之后匹配的地址.(表示当前行),以及

s/pattern/replacement/g
Run Code Online (Sandbox Code Playgroud)

然后在当前行上执行替换(请参阅参考资料:help :substitute),即您刚刚制作的副本.最后的g标志导致对行中的所有匹配模式执行替换,而不仅仅是第一个.另请注意,我将搜索模式留空:为方便起见,Vim会记住上一个:global:substitute命令中使用的最后一个搜索模式.