为什么vim粘贴的行为取决于拉动方法

时间:2018-10-31 08:34:43

标签: vim paste yank

根据我如何拉线,我看到不同的粘贴行为。我想知道为什么。

如果我从普通模式开始拉线:

^v$y

^转到行首

v进入视觉模式

$转到行尾

y要拉动

然后我用p粘贴,它可以按预期工作。

但是,当我从普通模式开始以直线方式使用可视模式抽出一条线时:

Vy

V逐行进入可视模式

y要拉动

然后使用p进行粘贴,我看到该行粘贴在当前行下方。就像粘贴操作是先打开新行,然后粘贴到那里。

示例。开头的行:

Line1
Line2
Line3. Insert here 

我使用方法1拉动Line2。

我将光标移至Line3的点,然后按p进行粘贴。我得到这个结果:

Line1
Line2
Line3.Line2 
 Insert here

但是当我使用两种方法进行相同的操作时,会得到以下结果:

Line1
Line2
Line3. Insert here
Line2

如果两种情况下:registers的内容相同,为什么粘贴效果不同?

编辑:

找到答案here

即使寄存器内容相同;寄存器的类型因拉取方法的不同而不同,并且不同的寄存器类型会使粘贴执行不同的操作。

3 个答案:

答案 0 :(得分:6)

说明

如果仔细观察,您会发现使用v$还是V有所不同:

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

^J换行符,表示整个行已被删除。

动作要么影响整行,要么影响开始和结束位置之间的字符。在Vim内部,按字符分别称为:help linewise。视觉模式也是如此(<C-V>的第三种模式称为逐块模式)。因此,如何处理东西就大有不同了!您可以在:registers命令中看到它,也可以通过:help getregtype()函数查询它,但是在实践中,这很少会让人感到意外(一旦您掌握了这个概念)。

使用插件启动

我经常需要将注册内容“广播”到某种(字符/行/块)模式,为此我写了UnconditionalPaste plugin。它提供gcpglp等替代强制某种模式的内置粘贴命令(到目前为止,此主题还有更多变体,例如粘贴逗号或查询字符)

有了它,您就可以使用gcp / gcP在光标位置之后/之前粘贴,而不管您是如何拉动文本的(例如,通过{{1} },就像您的问题一样。

答案 1 :(得分:1)

找到答案here

即使寄存器内容相同;寄存器的类型根据拉动方法的不同而不同。寄存器类型使粘贴做不同的事情。 您可以通过键入:echo regtype('"')

查看给定寄存器的寄存器类型。

答案 2 :(得分:0)

我建议使用<li class="car" data-id="car1"> <img src="https://imageurl.com/currentImage" alt=""> </li> <li class="car" data-id="car12"> <img src="https://imageurl.com/currentImage" alt=""> </li> <li class="car" data-id="car2"> <img src="https://imageurl.com/currentImage" alt=""> </li> <li class="car" data-id="car7"> <img src="https://imageurl.com/currentImage" alt=""> </li>代替Vy,也可以使用yg_,但您要键入一个额外的字符。所以:

vg_y

OBS:yg_ ................... yank until the last character of the line 不包含换行符。欲了解更多g_

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

:h g_