0

在 Vim 中,当我们尝试粘贴最后一个 yank 时,我们按 p。那时,我希望将寄存器粘贴到我的光标所在的位置,而不是光标之后。

更准确地说,它的行为类似于“a”,它是“i”的特殊版本。但是“p”是一个非常原始的命令,我希望它表现得像“i”而不是“a”。

At the cursor - After the cursor
i - a
P - p

额外的问题:为什么是i+<esc>=h

4

2 回答 2

5

很难与直觉争论——每个人都有自己的:-)

的行为的原因与 forp相同a:您需要一种在文本之后粘贴的方法。否则,将无法在行尾执行此操作(忽略较新的 Vim 设置,例如旧vi'virtualedit'中不存在的),并且在其他地方您必须在粘贴。

向左移动时

同样,光标向左移动Esc,使其始终位于有效字符上。有关更多详细信息和补救措施,请参阅此 Vim Tips Wiki 页面

于 2013-02-08T13:16:48.787 回答
5

你很困惑:这些命令都不能“在光标处”工作,因为在正常模式下,光标总是一个字符上。粘贴“在光标处”或进入插入模式“在光标处”意味着应该删除光标下的字符,这很少是我们想要的,并且行为iapP与此一致。

i不会在“光标处”而是“光标之前”启动插入模式,并P遵循相同的逻辑:未命名寄存器的内容被插入“光标之前”。

lore[m] ipsum
i
lore|m ipsum <-- before the cursor

a在“光标之后”启动插入模式并p遵循相同的逻辑:未命名寄存器的内容被插入“光标之后”。

lore[m] ipsum
a
lorem| ipsum <-- after the cursor

但是,如果无法粘贴现有v{motion}p文本s

要充分利用 Vim,您必须接受模态,更具体地说,要习惯光标在正常模式下的行为。

奖励答案:退出插入模式时,正常模式光标位置始终位于插入模式光标左侧的字符上。这是一个半任意的选择,这种选择是有意义的,而相反的行为(将光标放在右侧)不会更有意义 IMO。

于 2013-02-08T13:45:30.367 回答