vim - 为什么 yyp 的行为不符合 p 的文档
问题描述
我只是想知道是否有人可以解释幕后发生的事情yyp。
给定一些文字:
Text that can be copied
yyp在光标位于一行中间时键入,假设就在 之前can
,结果:
Text that can be copied
Text that can be copied
这虽然非常有用且合乎逻辑,但通常不是p这样。
由于p粘贴在光标之后,而我的光标仍然保留在 之前can
,我不认为期待类似的内容是错误的:
Text that Text that can be copied can be copied
虽然我同意前者更有用 - 有人可以解释为什么以及如何在这些情况下p忽略默认行为?
解决方案
这在 中进行了解释:help linewise-register
。Vim 动作要么覆盖一系列字符,要么覆盖整行。同样,被拉入寄存器的文本要么由字符(包括换行符,但不以 1 结尾)、完整行(总是以换行符结尾)或一块文本(来自<C-V>
逐块视觉选择)组成。粘贴时,“插入点”由源寄存器确定,因此完整的行将粘贴在单独的行上。该命令在第一列中用/ /:reg
指示每个寄存器的类型。c
l
b
:reg abc
Type Name Content
c "a a word
l "b a line^J
b "c a block^Jof text
我同意您的观点,默认行为很有用。有时,覆盖它会有所帮助,例如,将不完整的文本粘贴为单独的行,或在现有行中插入完整的已删除行。Vim 提供了以您想要的方式插入寄存器内容的方法,但您必须记住它,并且它需要输入几个键。我经常需要将寄存器内容“转换”为某种(按字符/按行/按块)模式,为此我编写了UnconditionalPaste 插件。它提供了gcp
,glp
等替代内置粘贴命令的选项,这些命令强制某种模式(现在这个主题还有更多变体,比如用逗号或查询字符连接的粘贴)。
推荐阅读
- python - 使用熊猫将行删除到列中的条件
- c++ - C++ 创建 2d 矢量错误消息 C26444
- angular - 错误:“可观察”类型上不存在属性“地图”
' - serverless-framework - 如何在脚本中解析 serverless.yml 文件
- java - 第二次调用类方法时,@Value 字段显示为空
- laravel - 无法使用 Forge、nginx 和 AWS 连接到 Laravel Websocket
- c# - 检查经理列表是否包含其经理的任何员工列表中的员工,该员工也是经理
- 8085 - 8085 程序在 8085 模拟器中添加两个 8 位数字
- discord - 是否可以检查用户是否启用了 PM?
- python - InvalidArgumentError: indices[1656,1] = 83 is not in [0, 83), 当我想训练 LSTM