v / Vi中p的不直观行为

时间:2013-02-08 13:09:09

标签: vim vi

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

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

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

奖金问题:为什么i+<esc>=h

2 个答案:

答案 0 :(得分:5)

很难凭直觉争辩 - 每个人都有自己的: - )

p行为的原因与a相同:您需要一种方法在文本后粘贴。否则,就不可能在行的末尾执行此操作(忽略较新的Vim设置,例如'virtualedit',旧的 vi 中不存在),以及其他地方你必须在粘贴之前移动光标(笨重!)。

向左移动

同样,光标在 Esc 之后向左移动,以便它始终位于有效字符上。有关详细信息和补救措施,请参阅this Vim Tips Wiki page

答案 1 :(得分:5)

你很困惑:这些命令都没有工作&#34;在光标处&#34;因为,在正常模式下,光标始终 on 一个字符。粘贴&#34;在光标处#34;或进入插入模式&#34;在光标处#34;意味着应删除光标下的字符,这很少是我们想要的,iapP的行为与此一致。

i没有开始插入模式&#34;在光标处&#34;但是&#34;在光标之前#34;并且P遵循相同的逻辑:在光标&#34;之前插入未命名寄存器的内容&#34;。

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

a在光标&#34;之后开始插入模式&#34;并且p遵循相同的逻辑:在光标&#34;之后插入未命名寄存器的内容&#34;。

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

然而,如果不能粘贴现有文本(v{motion}p)或者在删除光标(s)下的字符或各种类型的情况下开始插入模式,Vim会很糟糕疯狂的文字处理技巧。

为了充分利用Vim,您必须拥抱模态 - 更具体地说 - 习惯于在正常模式下光标的行为。

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