我经常需要将某些内容粘贴到多个相邻行的相同或相似位置。每次移动到下一行时,都必须将光标移回粘贴内容的开头,这很痛苦。如何在不移动光标的情况下粘贴(如命令“p”)?或者说,如何快速让光标回到粘贴前的位置?
不破坏寄存器的最安全方法是执行以下操作:
p`[
如果你想创建快捷方式,只需使用任何适合你的 vim 地图功能,例如:
noremap p p`[
每当我需要重复执行一系列步骤时,我都会录制一个宏,这在 Vim 中非常简单。 一般方法是
因此,在您的情况下,记录宏的整个击键顺序可能是
qxp`[jq
和
5@x
重播五次,总共 6 次更改。
请注意,第一个 q 之后的字符是用于记录宏的寄存器,它可以是任何字母,而不仅仅是 x。 请小心,您的宏不会将文本拉入当前正在录制的寄存器中,这会让事情变得一团糟!
宏可以任意长且复杂。 它们可以包含 Ex 模式命令,甚至调用其他宏。
您可以在不保留右侧键盘布局中的行的情况下完成此操作(除了 p ofc):
pg;
g; 转到更改列表中列出的上一个位置
欲了解更多信息:
:help changelist
:help changes
您可以通过按 CTRL-o 快速返回到粘贴之前的位置。 这通常会移回之前的光标位置。
我正在将大型文档中各处的行粘贴到 3 个标记之一(在行周围移动到标题下方)。 我发现最快的方法是:
'ap
后跟 CTRL-o
我在寻找 Vim 内置的无需移动光标的粘贴方式时发现了此页面。
到目前为止我一直在做的就是这三个步骤——这不需要我记住任何新的快捷方式:
这会将光标留在粘贴之前所在的位置,但是需要按 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
又来了。
有什么正确的方法可以解决这个问题吗?
‘k’? (如向上箭头所示)
如果使用“p”在当前行下方粘贴文本,则光标将位于粘贴内容的第一行。在命令模式下键入“k”会将您带到粘贴内容开头上方的行。