Vim - 用寄存器替换与模式匹配的每一行

Vim - replace every line matching a pattern with a register

假定寄存器 y 填充了一些文本。我可以用寄存器 y 替换缓冲区中与某种模式匹配的每一行吗?

我认为是这样的:

:g/[pattern]/"yp

但这绝对行不通(我知道行不通,但还是试过了)。有没有办法一举成功?

一种方法是使用 :s\=

:%s/.*pattern.*/\=@y

使用 :global,您需要类似(未测试)

:g/pattern/exe "normal! S\<c-r>y\<esc>"

可能是以下方法可行(我不确定,因为我已经更改了 p 视觉模式下的行为 -> 未经测试)

 :g/pattern/normal! V"yp

或以下不会更改默认寄存器的内容:

 :g/pattern/call setline('.', @y)