在Vim粘贴一条猛拉的线后,为什么我不能再粘贴它?

rac*_*v91 4 vim paste yank

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

我对Vim有点新,我遇到了以下问题.一旦我划线并粘贴它,我就不能再粘贴它了.例如,在Word环境中,您可以复制文本,粘贴它,然后您可以再次粘贴它.但是在Vim中,一旦我粘贴它然后再次尝试粘贴(p),它就粘贴了我粘贴在拉线上的文本.

因此,例如,我将"这条线被猛拉"的线条拉到"我不想要这条线"上,因此"这条线被猛拉"发生在"我不想要这条线"上.如果我再次点击p,我将不会得到"这条线被猛拉"粘贴,但会得到"我不想要这条线".

有没有办法我可以再次粘贴相同的拉线而不回去再次拉扯它?

Zac*_*ach 11

这是因为vim的寄存器.当您将一条拉线粘贴到另一条线上时,您刚删除的线(通过粘贴它)占据默认寄存器(存储拉线)中的拉线位置.这是为了简化切换线.Yank one,粘贴另一个,然后再回去粘贴.但是,为了保持你的拉线你可以指定一个寄存器,所以不用y你可以使用"ay,这将把你的线拉到注册a.现在粘贴你可以使用"ap,这将粘贴寄存器的内容a,这将不会被覆盖.

作为奖励"+y"*y"+p"*p从系统剪贴板(其他应用程序的复制粘贴)如果在VIM启用(这是大多数系统)的糊状物.

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

  • 这个答案中的一切都是真的.我只想补充说,yanking不仅会进入默认寄存器 - 它还会进入`0`寄存器,该寄存器始终包含最近被拉出的文本; 它不会被删除或改变默认寄存器的方式所覆盖.这意味着如果你想再次粘贴一些东西,即使在执行删除之后,你也可以只需要"0p",而不需要再次将文本拉出来或手动进入命名寄存器. (2认同)

小智 7

从我的 .vimrc:

"Paste in visual mode without copying
xnoremap p pgvy
Run Code Online (Sandbox Code Playgroud)

解释:

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

p - 粘贴

gv - 重新选择上一个选择(不是您当前选择的,而是原始选择)

y - 复制它(最后选择)

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

  • 这很棒!为了完整起见,还可以添加“xnoremap P Pgvy”,它将与 P 一起使用 (3认同)