在Vim中,当我们尝试粘贴最后一次猛拉时,我们按下p.此时,我希望将寄存器粘贴到光标所在的位置,而不是光标之后.
更确切地说,它的行为类似于'a',它是'i'的特殊版本.但是'p'是一个如此原始的命令,我希望它表现得像'我'而不是'a'.
At the cursor - After the cursor
i - a
P - p
Run Code Online (Sandbox Code Playgroud)
奖金问题:为什么i+<esc>=h?
用直觉争论很难 - 每个人都有自己的:-)
行为的原因与p以下内容相同a:您需要一种方法在文本后粘贴.否则,就不可能在行的末尾执行此操作(忽略较新的Vim设置,例如'virtualedit'旧的vi中不存在的),而在其他地方你必须移动光标(笨重!)之前糊.
同样,光标向左移动Esc,使其始终位于有效字符上.有关更多详细信息和补救措施,请参阅此Vim Tips Wiki页面.
你困惑是:没有这些命令的工作"在光标处",因为,在正常模式下,光标始终是在一个字符.粘贴"在光标处"或在光标处进入插入模式将意味着应该删除光标下的字符,这很少是我们想要的,并且行为iapP与此一致.
i不会在"光标"处开始插入模式,而是"在光标之前"并P遵循相同的逻辑:未命名寄存器的内容将"插入光标之前".
lore[m] ipsum
i
lore|m ipsum <-- before the cursor
Run Code Online (Sandbox Code Playgroud)
a在"光标之后"开始插入模式并p遵循相同的逻辑:未命名寄存器的内容在"光标之后"插入.
lore[m] ipsum
a
lorem| ipsum <-- after the cursor
Run Code Online (Sandbox Code Playgroud)
但是,如果v{motion}p在删除光标(s)下的字符或各种疯狂的文本操作技巧时无法粘贴现有的文本()或开始插入模式,Vim会很糟糕.
为了充分利用Vim,你必须拥抱模态 - 更具体地说 - 习惯于在正常模式下光标的行为.
额外答案:当您退出插入模式时,正常模式光标位置始终位于插入模式光标左侧的字符上.这是一种半随意的选择,那种有意义和相反的行为(把光标放在右边)不会让IMO更有意义.