5

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

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

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

有没有办法可以再次粘贴相同的拉线而不返回并再次拉线?

4

2 回答 2

13

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

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

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

于 2014-08-12T14:39:28.560 回答
8

From my .vimrc:

"Paste in visual mode without copying
xnoremap p pgvy

Explanation:

xnoremap - remap only in visual mode

p - Paste

gv - Reselect last selection (not the one that you currently on, but the original)

y - copy it (last selection)

Within this mapping you can paste over visually selected lines over and over.

于 2014-08-13T09:08:50.053 回答