我根据我怎么拽线看到不同的粘贴行为。我想知道为什么。
如果我猛拉从正常模式开始行:
^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
即使寄存器的内容是相同的;取决于猛拉方法和不同的寄存器型寄存器的类型而变得不同,使粘贴做不同的事情。
如果你仔细观察,你会看到您是否已使用v$
或V
的差异:
:registers ab
--- Registers ---
"a foo
"b foo^J
这^J
是换行字符意味着整条生产线已猛拉。
运动影响任一整行,或开始和结束位置之间的字符。 Vim内部,这被称为:help linewise
和字符的模式。这同样适用于视觉模式(而且也为<C-V>
称为嵌段第三模式)。因此,它的确与众不同,你怎么猛拉的东西!您在:registers
命令看到这一点,并且还可以通过:help getregtype()
功能查询此,但在实践中,这种情况很少是一个意外(一旦你掌握的概念)。
我需要“投”注册内容到一定(面向字符/面向行/列块)模式,这样的时候,我写了UnconditionalPaste plugin它。它提供gcp
,glp
等替代迫使某一模式(和现在几个变体这一主题,等粘贴用逗号或查询字符接合)内置粘贴命令。
有了它,你可以(通过gcp
例如,来自行选择模式,在你的问题)使用gcP
/ V
后贴/光标位置之前,不管你是如何猛拉文本。
找到了答案here
即使寄存器的内容是相同的;取决于方法猛拉寄存器的类型而变得不同。注册类型,使粘贴做不同的事情。你可以通过键入:echo regtype('"')
看到一个给定的注册登记类型
相反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