为什么Vim粘贴行为不同,这取决于唬弄方法

问题描述 投票:4回答:3

我根据我怎么拽线看到不同的粘贴行为。我想知道为什么。

如果我猛拉从正常模式开始行:

^v$y

^去行的开头

v进入可视化模式

$去行的末尾

y猛拉

然后我用p粘贴,它工作正常。

然而,当我猛拉线从正常模式启动和使用视觉模式面向行的:

Vy

V去可视化模式面向行

y猛拉

然后我用p贴,我看行粘贴当前线以下。这就像粘贴操作首先打开一个新的线,然后粘贴在那里。

例。行开头:

Line1
Line2
Line3. Insert here 

我猛拉线2使用方法1。

我将光标移动到3号线的点,然后按p粘贴。我得到这样的结果:

Line1
Line2
Line3.Line2 
 Insert here

但是,当我使用唬弄两个方法做同样的事情,我得到这样的结果:

Line1
Line2
Line3. Insert here
Line2

如果内容:寄存器在这两种情况下,为什么贴上代码不同一样的吗?

编辑:

找到了答案here

即使寄存器的内容是相同的;取决于猛拉方法和不同的寄存器型寄存器的类型而变得不同,使粘贴做不同的事情。

vim paste yank
3个回答
6
投票

Explanation

如果你仔细观察,你会看到您是否已使用v$V的差异:

:registers ab
--- Registers ---
"a   foo
"b   foo^J

^J是换行字符意味着整条生产线已猛拉。

运动影响任一整行,或开始和结束位置之间的字符。 Vim内部,这被称为:help linewise和字符的模式。这同样适用于视觉模式(而且也为<C-V>称为嵌段第三模式)。因此,它的确与众不同,你怎么猛拉的东西!您在:registers命令看到这一点,并且还可以通过:help getregtype()功能查询此,但在实践中,这种情况很少是一个意外(一旦你掌握的概念)。

Power up with plugins

我需要“投”注册内容到一定(面向字符/面向行/列块)模式,这样的时候,我写了UnconditionalPaste plugin它。它提供gcpglp等替代迫使某一模式(和现在几个变体这一主题,等粘贴用逗号或查询字符接合)内置粘贴命令。

有了它,你可以(通过gcp例如,来自行选择模式,在你的问题)使用gcP / V后贴/光标位置之前,不管你是如何猛拉文本。


1
投票

找到了答案here

即使寄存器的内容是相同的;取决于方法猛拉寄存器的类型而变得不同。注册类型,使粘贴做不同的事情。你可以通过键入:echo regtype('"')看到一个给定的注册登记类型


0
投票

相反Vy的,我会建议yg_,也可能是vg_y但你键入一个多余的字符。所以:

yg_ ................... yank until the last character of the line

OBS:g_不包括新行字符。欲了解更多:h g_

从线到没有新行的最后一个的第一个字符选择:

_vg_

_ ............... jump to the first non-blank char
v ............... visual
g_ .............. las non-blank of the line
© www.soinside.com 2019 - 2024. All rights reserved.