代码之家  ›  专栏  ›  技术社区  ›  Mapad

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

  •  74
  • Mapad  · 技术社区  · 17 年前

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

    例子:

    line1
    line2
    line3
    

    我想复印 line1 ,将光标放在上面并输入 "ay 然后继续 line3 并且做 “唉! . 那么,我什么时候做 "ap ,两者 线1 线3 将粘贴。

    没有插件这是可能的吗?有插件吗?

    2 回复  |  直到 9 年前
        1
  •  116
  •   MarkB    17 年前

    如果要附加到指定的寄存器,请使用它对应的大写字符。 例如,在您的示例中:

    "ayy
    "Ayy
    "ap
    
        2
  •  11
  •   Sagar Jain    11 年前

    只是为了扩大markb的反应,你知道你也可以使用markers来选择一个文本块为你的扬克吗?

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

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

    然后进入你想要猛拉的方块底部,输入命令:

    :'a,.ya A
    

    此命令意味着从包含我的标记a的行中提取文本块到当前行,并将其拉入缓冲区a中。与前面提到的标记b相同的规则适用,使用小写缓冲区名称覆盖缓冲区。使用大写缓冲区名称追加到缓冲区。因此,在本例中,这将附加到缓冲区A的内容中。

    注意:用于标记的“A”与用于选择寄存器的“A”无关。(阿法克,YMMV)

    btw'a(撇号a)表示包含标记a的行。'a(反引号a)表示输入ma时光标下的字符。

    `ad`b (also entered in command mode)
    

    非常有用,因为它将删除标记为a的字符之间的文本,直到该字符为止 就在之前 用标记B标记的字符。