93

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

例子:

line1
line2
line3

我想复制line1,把光标放在上面并输入"ay,然后继续line3"ay。然后,当我会做的时候"ap, BOTH line1ANDline3将被粘贴。

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

4

2 回答 2

137

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

“哎呀
“哎呀
“AP
于 2008-12-19T12:38:16.360 回答
12

只是为了扩展 MarkB 的响应,您是否知道您也可以使用标记来为您的 yank 选择一个文本块?

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

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时光标下的字符。

d`a (also entered in command mode)

很有用,因为它会删除用标记 a 标记的字符到光标当前所在字符之前的字符之间的文本。

于 2008-12-19T20:58:34.930 回答