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

BLo*_*owe 2 vim neovim

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

我认为它是这样的:

:g/[pattern]/"yp
Run Code Online (Sandbox Code Playgroud)

但这绝对不起作用(而且我知道它不会反过来尝试).有没有办法在一次失败中做到这一点?

Luc*_*tte 5

一种方法是使用 :s\=

:%s/.*pattern.*/\=@y
Run Code Online (Sandbox Code Playgroud)

:global,你需要像(未经测试的)

:g/pattern/exe "normal! S\<c-r>y\<esc>"
Run Code Online (Sandbox Code Playgroud)

可能是以下可能工作(我不确定,因为我p在视觉模式中改变了行为 - >未经测试)

 :g/pattern/normal! V"yp
Run Code Online (Sandbox Code Playgroud)

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

 :g/pattern/call setline('.', @y)
Run Code Online (Sandbox Code Playgroud)