vi/vim 中粘贴后的光标位置

vi/vim 中粘贴后的光标位置

一直困扰我的一件事vi/vim:

如果我“猛拉”(又名“复制”)一些文本,然后移动到文件中的另一个位置并执行“粘贴”,我的光标仍停留在开始我刚刚粘贴的文本。这与大多数现代编辑器的做法不同,后者将光标放在结尾我粘贴的文本。

例如,假设“复制缓冲区”包含单词“awesome”,我想将其粘贴到短语中的单词“an”之后:

This is an editor

例如,在编辑器,粘贴后:

This is an awesome editor
                  ^ Cursor is here

:

This is an awesome editor
           ^ Cursor is here

我可以改变吗 表现得像(例如)编辑器 在这方面?

答案1

在 vim 中,使用gpandgP代替pandP将光标留在粘贴的文本后面。如果您想交换绑定,请将以下行放入您的.vimrc

noremap p gp
noremap P gP
noremap gp p
noremap gP P

奇怪的是,在 vim 中,即使在兼容模式下,pP将光标保留在字符缓冲区的最后粘贴的字符上。

我不知道如何在其他 vi 版本中更改此设置。

答案2

']或者'>在这里也可能有用。

:h motion.txt

'] `] 到先前更改或拉出的文本的最后一个字符。

'> `> 到当前缓冲区中最后选定的可视区域的最后一行或最后一个字符。对于块模式,它也可能是最后一行的第一个字符(以便能够定义块)。请注意,适用“选择”,该位置可能就在可视区域之后。

答案3

我很确定这是设计使然。如果您使用“p”(小写 P)进行粘贴,则应该粘贴当前位置或行。但是,如果您使用“P”(大写 P)进行粘贴,则会粘贴当前位置或行。如果您想要的行为是让光标位于新粘贴文本的末尾,请尝试养成使用“P”而不是“p”的习惯。

我敢打赌,如果你挖得足够深,你可以找到一个 vim 配方放入你的 .vimrc 中,它总是将光标移动到粘贴的末尾,即使你使用“p”。

答案4

根据https://unix.stackexchange.com/a/5060/457327和我的习惯,我绘制:

    nnoremap p P
    " nnoremap p <left>P  (does not work)

        
    " p: paragraph  
        nnoremap vP Vip
        nnoremap <leader>v Vip

    nnoremap P v$<left>P
        " like  Y D C

相关内容