【发布时间】:2021-05-13 12:28:14
【问题描述】:
我经常需要将一些东西粘贴到几个相邻的行中,在相同或相似的位置。每次移动到下一行时,都必须将光标移回粘贴内容的开头,这很痛苦。如何在不移动光标的情况下粘贴(如命令“p”)?或者,如何快速让光标回到粘贴前的位置?
【问题讨论】:
标签: vim
我经常需要将一些东西粘贴到几个相邻的行中,在相同或相似的位置。每次移动到下一行时,都必须将光标移回粘贴内容的开头,这很痛苦。如何在不移动光标的情况下粘贴(如命令“p”)?或者,如何快速让光标回到粘贴前的位置?
【问题讨论】:
标签: vim
不破坏寄存器的最安全方法是执行以下操作:
p`[
如果你想创建一个快捷方式,只要使用任何适合你的 vim 的 map 函数,例如:
noremap p p`[
【讨论】:
nnoremap p P`[j:这会粘贴之前,将光标保持在同一位置,然后向下移动一行。只要内容对齐,您就可以注释代码、在连续行上添加/附加内容等,所有这些都可以通过混搭 p 键来实现。非常灵活。
P 时,有什么方法可以让. 尊重这个重映射?因为目前当我运行nnoremap P P`[ 时,我得到的正是我想要的P 行为,但是如果我在之后点击. 而不是另一个P,它只会重新运行原始P。 :(
<ctrl+o> 之后是否可以使此映射适用于p 键?通过这个映射,我在插入模式 ctrl+o 和 p 中获得了额外的 '[]'。
每当我有一系列步骤要重复多次时,我都会录制一个宏,这在 Vim 中非常容易。一般的方法是
因此,在您的情况下,记录宏的整个击键序列可能是
qxp`[jq
和5@x 重播五次,共进行 6 次更改。
请注意,第一个 q 之后的字符是用于记录宏的寄存器,它可以是任何字母,而不仅仅是 x。请注意您的宏不会将文本拉入当前正在录制的寄存器中,这会使事情变得一团糟!
宏可以任意长和复杂。它们可以包含 Ex 模式命令,甚至可以调用其他宏。
【讨论】:
您可以通过按 CTRL-o 快速回到粘贴前的位置。这通常会移回上一个光标位置。
我正在将整个大型文档中的线条粘贴到 3 个标记之一(围绕线条移动到标题下方)。我发现最快的方法是:
'ap
后跟 CTRL-o
【讨论】:
您可以在不将行保留在正确键盘布局中的情况下执行此操作(除了 p ofc):
pg;
g; 转到更改列表中列出的上一个位置
更多信息:
:help changelist
:help changes
【讨论】:
'k' ? (如向上箭头所示)
如果您使用 'p' 将文本粘贴到当前行下方,则光标将位于粘贴内容的第一行。在命令模式下键入“k”会将您带到粘贴内容开头上方的行。
【讨论】: