为什么 yyp 的行为不符合 p 的文档
Why does yyp not behave according to p's documentation
我只是想知道是否有人可以解释幕后发生的事情 w.r.t 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 的默认行为吗?
这在 :help linewise-register
. Vim motions either cover a sequence of characters or whole lines. Likewise, text that is yanked into a register either is comprised of characters (including newlines, but not ending with one), complete lines (always ending with a newline), or a block of text (from a <C-V>
blockwise visual selection). When you paste, the "insertion point" is determined by the source register, so complete lines will be pasted on separate lines. The :reg
中有解释,命令在第一列中用 c
/ l
/ b
指示每个寄存器的类型。
:reg abc
Type Name Content
c "a a word
l "b a line^J
b "c a block^Jof text
我同意你的看法,默认行为很有用。有时,覆盖它是有帮助的,例如将不完整的文本粘贴为单独的行,或在现有行中插入完整的已删除行。 Vim 提供了以您想要的方式插入寄存器内容的方法,但您必须记住它并且需要输入几个键。我经常需要 "cast" 将内容注册到某种(按字符/按行/按块)模式,我为此编写了 UnconditionalPaste plugin。它提供了 gcp
、glp
等强制特定模式的内置粘贴命令的替代方案(现在这个主题还有几个变体,比如用逗号或查询字符连接的粘贴) .
在 Vim 中,抽取的文本存储在名为 "a register" 的内部变量中。然而,Vim 中的寄存器不仅保留文本本身,还保留 "the type of text"("char"、"line" 或 "block" 之一,就像视觉模式一样)。
所以yy
保存文本"Text that can be copied",类型为"line"。因此,p
命令尊重这一点并将其放在自己的行上。
您可以使用 :call setreg('', @@, 'c')
更改此设置(在末尾保留换行符但覆盖内部类型)或使用 0y$
等进行抽取
我只是想知道是否有人可以解释幕后发生的事情 w.r.t 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 的默认行为吗?
这在 :help linewise-register
. Vim motions either cover a sequence of characters or whole lines. Likewise, text that is yanked into a register either is comprised of characters (including newlines, but not ending with one), complete lines (always ending with a newline), or a block of text (from a <C-V>
blockwise visual selection). When you paste, the "insertion point" is determined by the source register, so complete lines will be pasted on separate lines. The :reg
中有解释,命令在第一列中用 c
/ l
/ b
指示每个寄存器的类型。
:reg abc
Type Name Content
c "a a word
l "b a line^J
b "c a block^Jof text
我同意你的看法,默认行为很有用。有时,覆盖它是有帮助的,例如将不完整的文本粘贴为单独的行,或在现有行中插入完整的已删除行。 Vim 提供了以您想要的方式插入寄存器内容的方法,但您必须记住它并且需要输入几个键。我经常需要 "cast" 将内容注册到某种(按字符/按行/按块)模式,我为此编写了 UnconditionalPaste plugin。它提供了 gcp
、glp
等强制特定模式的内置粘贴命令的替代方案(现在这个主题还有几个变体,比如用逗号或查询字符连接的粘贴) .
在 Vim 中,抽取的文本存储在名为 "a register" 的内部变量中。然而,Vim 中的寄存器不仅保留文本本身,还保留 "the type of text"("char"、"line" 或 "block" 之一,就像视觉模式一样)。
所以yy
保存文本"Text that can be copied",类型为"line"。因此,p
命令尊重这一点并将其放在自己的行上。
您可以使用 :call setreg('', @@, 'c')
更改此设置(在末尾保留换行符但覆盖内部类型)或使用 0y$
等进行抽取