微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我看到不同的粘贴行为取决于我如何拉线.我想知道为什么.

如果我从正常模式开始划线:

^v$y

^去行的开头

v进入可视模式

$到最后一行

你要猛拉

然后我使用p粘贴它按预期工作.

但是,当我从正常模式开始并使用直线视觉模式拉线时:

Vy

V按行进入可视模式

你要猛拉

然后我使用p粘贴,我看到该行被粘贴在当前行下方.这就像粘贴操作首先打开一个新行然后粘贴那里.

例.开头的行:

Line1
Line2
Line3. Insert here

我用方法1猛拉了Line2.

我将光标移动到Line3的点,然后按p粘贴.我得到这个结果:

Line1
Line2
Line3.Line2 
 Insert here

但是当我使用yanking方法做同样的事情时,我得到了这个结果:

Line1
Line2
Line3. Insert here
Line2

如果:寄存器的内容在两种情况下是相同的,为什么粘贴工作不同?

编辑:

找到答案here

即使寄存器内容相同;寄存器的类型根据yanking方法而变得不同,并且不同的寄存器类型使得粘贴做不同的事情.

解决方法

说明

如果仔细观察,您应该看到是否使用了v $或V:

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

^ J是换行符,表示整条线已经被拉出.

动作要么影响整行,要么影响开始和结束位置之间的字符.在Vim内部,这被称为:help linewise和字符.这同样适用于视觉模式(并且< C-V>第三模式称为blockwise).所以,它会对你如何猛拉东西产生影响!你可以在:registers命令中看到这个,也可以通过:help getregtype()函数查询它,但在实践中,这很少出人意料(一旦你掌握了这个概念).

通过插件启动

我需要将寄存器内容“转换”成某种(字符/线性/块状)模式,所以我经常为它编写UnconditionalPaste plugin.它提供了强制某种模式的内置粘贴命令的gcp,glp等替代方法(此时此主题有几种变体,例如用逗号或查询字符连接粘贴).

有了它,您可以使用gcp / gcP粘贴光标位置之前/之后,无论您如何拉动文本(例如,从您的问题中通过V的线性视觉模式).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐