粘贴在Vim中而不移动光标

时间:2009-10-19 06:05:41

标签: vim

我经常需要在相同或相似的位置将东西粘贴到几条相邻的线上。每次移动到下一行时,必须将光标移回粘贴内容的开头是一件痛苦的事。如何在不移动光标的情况下粘贴(如命令'p')?或者,如何快速将光标恢复到粘贴前的位置?

5 个答案:

答案 0 :(得分:24)

不破坏寄存器的最安全方法是执行以下操作:

p`[

如果您想创建一个快捷方式,只需使用适合您的任何vim的地图功能,例如:

noremap p p`[

答案 1 :(得分:10)

每当我有一系列重复几次的步骤时,我都会记录一个宏,这在Vim中很容易。一般方法是

  1. 将光标定位在您想要进行第一次更改的位置。
  2. 键入qx以开始记录击键。
  3. 进行首次编辑。
  4. 将光标移动到第二次编辑应该开始的位置。
  5. 再次点击q退出录音。
  6. 键入@x以重播宏并进行下一次编辑。 @命令需要计数,因此您可以使用一个命令多次重复编辑。
  7. 因此,在您的情况下,记录宏的整个按键序列可能是

    qxp`[jq
    

    5@x重播五次,总共有6次更改。

    请注意,第一个q之后的字符是用于记录宏的寄存器,它可以是任何字母,而不仅仅是x。小心你的宏不会将文本拖入目前正在录制的寄存器中,这会让事情变得一团糟!

    宏可以是任意长且复杂的。它们可以包含Ex模式命令,甚至可以调用其他宏。

答案 2 :(得分:3)

按CTRL-o可以快速回到粘贴前的位置。这通常会移回到前一个光标位置。

我将来自大型文档的线条粘贴到3个标记​​之一(在标题下移动线条)。我找到的最快的方法是:

'ap

然后是CTRL-o

答案 3 :(得分:2)

您可以在不离开右侧键盘布局的行的情况下完成此操作(除了 p ofc):

pg;

g; 转到更改列表中列出的上一个位置

更多信息:

:help changelist
:help changes

答案 4 :(得分:-5)

'k'? (如上箭头所示)

如果使用“p”粘贴当前行下方的文本,则光标将位于粘贴内容的第一行。在命令模式下键入“k”会将您带到粘贴内容开头上方的行。