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)
假定寄存器 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)