加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 21:20:24 所属栏目:安全 来源:网络整理
导读:我看到不同的粘贴行为取决于我如何拉线.我想知道为什么. 如果我从正常模式开始划线: ^v$y ^去行的开头 v进入可视模式 $到最后一行 你要猛拉 然后我使用p粘贴它按预期工作. 但是,当我从正常模式开始并使用直线视觉模式拉线时: Vy V按行进入可视模式 你要猛
我看到不同的粘贴行为取决于我如何拉线.我想知道为什么.

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

^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的线性视觉模式).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读