假设我有以下四行:

line1
line2
line3
line4


现在,如果我转到line1并执行yy,该行将复制该行,然后转到line3的开头并粘贴使用'p',我会得到

...
line3
line1
line4
....


为什么在新行中在line1之后粘贴line3

我最初的名字是因为换行符$附加到第3行,当我按p时,vim认为line3$是一个单词,因此它粘贴在line3$之后。但是,似乎我的理解是错误的。因为如果我这样做line3 $,然后在行的开头做p,我会得到相同的结果。

为什么p创建新行并在line3之后粘贴新行?

#1 楼

当使用dd删除行时,执行了逐行删除。

p命令粘贴在光标位置之后。由于默认寄存器是按行内容填充的,这意味着它将在光标所在的行之后粘贴。

如果相反,则以字符方式删除行的内容(例如0D) ,则该寄存器将按字符进行设置,因此将其粘贴到光标所在的字符之后。

通常,该行为应遵循删除/拖动和粘贴所期望的行为。但是,可以使用getreg()/ setreg()修改寄存器的-wise值。

但是要小心。在您的第一个示例中,仅将寄存器更改为字符式操作并不会删除作为删除一部分的换行符。它只是改变粘贴的方式。


有关删除整行但按字符粘贴的特定方案的建议,请参阅此文章。