首页 > 解决方案 > 为什么 yyp 的行为不符合 p 的文档

问题描述

我只是想知道是否有人可以解释幕后发生的事情yyp

给定一些文字:

Text that can be copied

yyp在光标位于一行中间时键入,假设就在 之前can,结果:

Text that can be copied
Text that can be copied

这虽然非常有用且合乎逻辑,但通常不是p这样。

由于p粘贴在光标之后,而我的光标仍然保留在 之前can,我不认为期待类似的内容是错误的:

Text that Text that can be copied can be copied

虽然我同意前者更有用 - 有人可以解释为什么以及如何在这些情况下p忽略默认行为?

标签: vimpasteyank

解决方案


这在 中进行了解释:help linewise-register。Vim 动作要么覆盖一系列字符,要么覆盖整行。同样,被拉入寄存器的文本要么由字符(包括换行符,但不以 1 结尾)、完整行(总是以换行符结尾)或一块文本(来自<C-V>逐块视觉选择)组成。粘贴时,“插入点”由源寄存器确定,因此完整的行将粘贴在单独的行上。该命令在第一列中用/ /:reg指示每个寄存器的类型。clb

:reg abc
Type Name Content
c  "a   a word
l  "b   a line^J
b  "c   a block^Jof text

我同意您的观点,默认行为很有用。有时,覆盖它会有所帮助,例如,将不完整的文本粘贴为单独的行,或在现有行中插入完整的已删除行。Vim 提供了以您想要的方式插入寄存器内容的方法,但您必须记住它,并且它需要输入几个键。我经常需要将寄存器内容“转换”为某种(按字符/按行/按块)模式,为此我编写了UnconditionalPaste 插件。它提供了gcp,glp等替代内置粘贴命令的选项,这些命令强制某种模式(现在这个主题还有更多变体,比如用逗号或查询字符连接的粘贴)。


推荐阅读