如何在vim寄存器中添加行而不覆盖它


84

我想在寄存器中插入一行:"{register}y但不覆盖寄存器中以前的内容。我经常需要在寄存器中复制非连续的行,有时我想像堆栈一样使用寄存器。

例:

line1
line2
line3

我要复制line1,方法是将光标放在其上并输入"ay,然后继续line3执行"ay。然后,当我要执行操作时"ap,将同时粘贴line1AND和BOTH line3

没有插件,这可能吗?有插件吗?


非常适合在文件顶部快速列出定义。
Joe McGrath

Answers:


131

如果要附加到命名寄存器,请使用其对应的大写字符。即在您的示例中:

“好
“好
“ ap

11
有什么可能的方法来追加到未命名的寄存器?(主要)
Zaffy


为了节省人们访问^^的机会,IMO使用命名寄存器更容易。当您键入“一个想法,'使用注册一个...”“一个'追加注册一个'
Rob Kielty

12

只是为了扩展MarkB的响应,您知道您还可以使用标记来选择要发送的文本吗?

选择要字母的标记后,转到要拉动的块的第一行并输入mark命令,例如

ma  (entered in command mode, i.e. no colon)

然后转到您要拉动的块的底部并输入命令:

:'a,.ya A

此命令意味着从包含我的标记的行(称为a)到当前行的文本块,然后将其拖动到缓冲区a中。适用与MarkB相同的规则,使用小写缓冲区名称覆盖缓冲区。使用大写的缓冲区名称来追加到缓冲区。因此,在这种情况下,这将追加到缓冲区a的内容中。

注意:用于标记的“ a”与用于选择寄存器的“ a”无关。(AFAIK但YMMV)

BTW'a(撇号a)是指包含标记a的行。`a(反引号a)是指您输入ma时光标下方的字符。

`ad`b (also entered in command mode)

之所以有用,是因为它将删除标记为a的字符之间的文本,直到删除标记为b的字符之前的字符。


'a,.ya A有效,但是当我尝试在->ʻa前面打勾时,它说:E492:不是编辑器命令:ʻa,.yaA。本来可以帮助不要使用其他字母而不是示例中的标记,因此很清楚哪个字母是哪个东西:)
justin w 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.