【问题标题】:After pasting a yanked line in Vim, why can't I paste it again?在 Vim 中粘贴了一条被拉出的行后,为什么我不能再次粘贴它?
【发布时间】:2014-10-05 16:27:04
【问题描述】:

这个问题之前可能已经回答过了,但是我尝试搜索并无法在任何地方找到答案。

我对 Vim 有点陌生,我遇到了以下问题。一旦我拉出一条线并粘贴它,我就无法再次粘贴它。例如,假设在 Word 环境中,您将复制文本、粘贴它,然后您可以进一步粘贴它。但是在 Vim 中,一旦我粘贴了它,然后再次尝试粘贴 (p),它就会粘贴我粘贴的文本。

例如,我将“这条线被拉”到“我不想要这条线”上,因此“这条线被拉”在“我不想要这条线”上。 如果我再次单击 p,我不会粘贴“这条线已被拉动”,但会得到“我不想要这条线”。

有没有一种方法可以让我再次粘贴相同的拉线而不返回并再次拉线?

【问题讨论】:

    标签: vim paste yank


    【解决方案1】:

    这是因为 vim 的寄存器。当您在另一行上粘贴一条被拉出的行时,您刚刚删除的行(通过粘贴)会在默认寄存器(存储被拉出的行)中取代被拉出的行。这是为了方便切换线路。拉出一个,粘贴到另一个上,然后返回并再次粘贴。然而,为了保持你的被拉出的行,你可以指定一个寄存器,所以你可以使用"ay而不是使用y,这会将你的行拉入寄存器a。现在粘贴你可以使用"ap,这将粘贴寄存器a的内容,不会被覆盖。

    如果在 vim 中启用(在大多数系统上启用),作为奖励 "+y"*y"+p"*p 从系统剪贴板粘贴(其他应用程序的复制粘贴)。

    编辑:如 cmets 中所述,当您使用 yank 命令时,被抽出的文本不仅会进入默认寄存器,还会进入 0 寄存器(粘贴到其他内容时不会被覆盖)。这意味着您通常可以使用y 拉动,然后使用"0p 粘贴它,它不会被您粘贴的任何内容覆盖。

    【讨论】:

    • 这个答案中的一切都是真的。我只想补充一点,拉动不仅会进入默认寄存器——它还会进入0 寄存器,它总是保存最近被拉出的文本;它不会被删除或更改默认寄存器的方式覆盖。这意味着如果您想再次粘贴某些内容,即使在执行了删除操作后,您也只需 "0p,而无需再次拉取文本或手动拉取到命名寄存器。
    • 啊,我不知道,这很有用,谢谢。
    • 谢谢,你的回答很好解释!
    【解决方案2】:

    来自我的 .vimrc:

    "Paste in visual mode without copying
    xnoremap p pgvy
    

    解释:

    xnoremap - 仅在可视模式下重新映射

    p - 粘贴

    gv - 重新选择最后一个选择(不是你当前选择的,而是原来的)

    y - 复制它(最后选择)

    在此映射中,您可以一遍又一遍地粘贴在视觉上选定的行上。

    【讨论】:

    • 这太棒了!为了完整起见,还可以添加xnoremap P Pgvy,它将与P一起使用
    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多