如何在不覆盖vim寄存器的情况下添加行

时间:2008-12-19 08:38:52

标签: vim keyboard-shortcuts

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

示例:

line1
line2
line3

我想复制line1,将光标放在"ay上,然后输入line3并执行"ay。然后,当我执行"ap时,将粘贴line1line3

没有插件可以吗?有插件吗?

2 个答案:

答案 0 :(得分:118)

如果要附加到命名寄存器,请使用相应的大写字符。 即在你的例子中:

"ayy
"Ayy
"ap

答案 1 :(得分:11)

为了扩展MarkB的回复,您是否知道您还可以使用标记为您的抽搐选择一个文本块?

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

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

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

:'a,.ya A

这个命令意味着从包含我的标记的行中取出文本块,称为a到当前行并将其拉入缓冲区a。与MarkB提到的规则相同,使用小写缓冲区名称来覆盖缓冲区。使用大写缓冲区名称附加到缓冲区。所以在这种情况下,这将附加到缓冲区a。

的内容

N.B。用于标记的“a”与用于选择注册的“a”无关。 (AFAIK但是YMMV)

BTW'a(撇号a)是指含有标记a的品系。 `a(反引号a)是指输入ma时光标下的字符。

`ad`b (also entered in command mode)

非常有用,因为它会删除标有标记a的字符到之前字符之间的文字您用标记b标记的字符。