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

标签 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

但是当我使用 yanking 方法二做同样的事情时,我得到了这个结果:
Line1
Line2
Line3. Insert here
Line2

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

编辑:

找到答案 here

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

最佳答案

解释

如果仔细观察,您应该会发现是否使用过 v$ 的不同之处。或 V :

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

那个^J是表示 的换行符全线已被猛拉。

Action 要么影响整行,要么影响开始和结束位置之间的字符。在 Vim 中,这被称为 :help linewise 和性格。这同样适用于视觉模式(<C-V> 有第三种模式,称为 blockwise)。所以,你拉东西的方式会有所不同!您可以在 :registers 中看到这一点命令,也可以通过 :help getregtype() 查询功能,但在实践中,这很少令人惊讶(一旦您掌握了这个概念)。

使用插件启动

我经常需要将寄存器内容“强制转换”为某种(逐字符/逐行/逐块)模式,我写了 UnconditionalPaste plugin为了它。它提供 gcp , glp等强制特定模式的内置粘贴命令的替代方案(以及现在该主题的更多变体,例如用逗号或查询字符连接粘贴)。

有了它,您只需使用 gcp/gcP在光标位置之后/之前粘贴,无论您是如何拉取文本的(例如,通过 V 从按行视觉模式,如您的问题)。

关于vim - 为什么 vim 粘贴的行为取决于 yanking 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53079244/

相关文章:

python - 需要用 +python 编译的 vim

vim - 使用 vim 在目录中重构类/方法/字符串的有效方法

vim - 有没有办法通过 “hide” Vim 的界面来查看底层的 shell?

javascript - 当我尝试复制、剪切和 Ctrl+Space 时,Eclipse 在 JavaScript 文件上挂起

javascript - meteor :如何将粘贴事件绑定(bind)到 html 元素?

emacs - 如何在 Emacs 中通过 yank 覆盖文本?

vim - 如何使 emmet.vim 插件工作?

javascript - 如何在 preventDefault 之后创建粘贴事件?

vim - 我怎样才能让 vim 记住过去的 yanks? (或配置 YankRing 以减少操作。)