在 Vim 中粘贴而不移动光标

问题描述 投票:0回答:6

我经常需要将某些内容粘贴到多个相邻行的相同或相似位置。每次移动到下一行时,都必须将光标移回粘贴内容的开头,这很痛苦。如何在不移动光标的情况下粘贴(如命令“p”)?或者说,如何快速让光标回到粘贴前的位置?

vim
6个回答
32
投票

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

p`[

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

noremap p p`[

13
投票

每当我需要重复执行一系列步骤时,我都会录制一个宏,这在 Vim 中非常简单。 一般方法是

  1. 将光标置于要进行第一个更改的位置。
  2. 输入 qx 开始记录击键。
  3. 进行第一次编辑。
  4. 将光标移动到第二次编辑应开始的位置。
  5. 再次按 q 退出录音。
  6. 键入 @x 以重播宏并进行下一次编辑。 @ 命令会进行计数,因此您可以使用一个命令重复编辑任意多次。

因此,在您的情况下,记录宏的整个击键顺序可能是

qxp`[jq

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

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

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


6
投票

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

pg;

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

欲了解更多信息:

:help changelist
:help changes

3
投票

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

我正在将大型文档中各处的行粘贴到 3 个标记之一(在行周围移动到标题下方)。 我发现最快的方法是:

'ap

后跟 CTRL-o


0
投票

我在寻找 Vim 内置的无需移动光标的粘贴方式时发现了此页面。

到目前为止我一直在做的就是这三个步骤——这不需要我记住任何新的快捷方式:

  1. 粘贴
  2. 撤消
  3. 重做

这会将光标留在粘贴之前所在的位置,但是需要按 Ctrl+R 相当烦人,并且它会更改状态行以谈论所做的更改。

阅读完本页和其他几页后,我更新了我的

~/.vimrc
以包含以下内容:

" Use Shift+P to paste text and leave cursor at the starting position
map P Pg;

这会重写

Shift+P
绑定,将光标保留在起始位置,同时保留
p
作为在光标后粘贴的快捷方式,同时将光标保留在所粘贴文本的末尾。

这不需要学习任何新的命令,并且似乎“正常工作”。

此方法的问题: 尝试这种方法,我注意到的唯一副作用是使用

.
重复
Shift+P
命令不使用重新映射,因此它仍然将光标移动到粘贴的末尾。 这不是一个大问题,如果我想向下一行将项目粘贴到每行的同一列中,我可以打开
Caps Lock
并按
p
,而不为每行按下
Shift
,然后关闭
Caps Lock 
又来了。

有什么正确的方法可以解决这个问题吗?


-7
投票

‘k’? (如向上箭头所示)

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

© www.soinside.com 2019 - 2024. All rights reserved.