Vim:用默认缓冲区替换选择而不覆盖缓冲区

Jue*_*mer 34 vim buffer replace yank

这是我的问题:

我处于视觉模式.

我选择文本并将其复制到缓冲区.((y)的ANK)

我选择了另一个要替换的文本并粘贴缓冲区.((糊)

现在第二个选择已经在缓冲区中被替换,但是我希望第一个选择仍然在那里.

有任何想法吗?

Pet*_*ter 30

通常,这种行为很有用.如果你不想要它,你可以改为做通常的猛拉,然后粘贴(正式,'put')"0p.你可以多次这样做.

了解:help v_p更多.

如果要避免覆盖,则需要先删除.您可以使用"_选择黑洞缓冲区,然后删除d,然后粘贴之前P,您将避免设置缓冲区.

  • 我从未发现vim的默认行为有用。“放置”不应该是“复制并放置”。 (5认同)
  • 您可以通过在可视模式下重新映射"p"命令使这两个都成为默认值.第一个选项是:`vnoremap p"0p`.当使用可视模式时,它使用"0"寄存器(最近的yank).未命名寄存器仍然被覆盖,但后续的put(在可视模式下)不使用它这确实意味着你必须首先猛拉,删除然后放置(在可视模式下)不再有效.第二个选项是(恕我直言)更好:`vnoremap p"_dP`并重新映射到第一个删除到黑洞寄存器然后做一个正常的放置.这应该是你要求的. (4认同)
  • @preferred_anon 不,当您复制某些内容(或“猛拉”它),然后选择其他内容并将其替换为 p(通过粘贴您复制的内容)时,p 也会将您之前复制的内容替换为您要替换的内容。因此,要使用相同的内容替换多个位置,您必须使用“_d 将每个位置删除到 void 寄存器中,然后您可以使用 p 进行粘贴。但是 p 应该只粘贴恕我直言,如果您想复制之前,您应该复制之前。如果我更换它,这条线不应该去任何地方。 (2认同)