粘贴多次

jwe*_*rre 84 vim copy paste

用剪贴板的内容替换多行的最佳方法是什么?

我遇到的问题是,当我猛拉一条线并将其粘贴到另一条线上时,"yank"将替换为我刚刚替换的线.现在,如果我想用同一条线替换另一条线,我必须重新开始并再次拉出它.

必须有一个更好的方法来做到这一点.

Ben*_*oit 100

我在.vimrc中有这个:

xnoremap p pgvy
Run Code Online (Sandbox Code Playgroud)

(注意:这只适用于默认寄存器,但这种映射很容易记住).可以编写更精细的版本.此外,您仍然可以使用P来获取旧行为.

  • 聪明.'p'粘贴,'gv'重新选择最初选择的内容.'是'再次复制它. (28认同)
  • 为什么这不是默认行为? (6认同)

das*_*ang 28

"0应该有你的猛拉内容.键入它有点繁琐,但"0p应该做你想要的.

或者,不要预先选择并替换旧行.如果你发现那些带有搜索的行,只需n.反复点击(在初始之后p),然后当它们全部粘贴时,请ndd按照n.必要的次数进行操作.

移动到Vim时我需要做的最大的心理转换是弄清楚如何顺序应用组编辑.也就是说,而不是在一行上做一堆编辑,然后在另一行上做一堆相同的编辑,我将在一堆行上进行第一次编辑(使用.效果很好),然后在一堆上进行第二次编辑或者,使用宏可能会有所帮助,因为它们非常棒,但有时候通过"复杂"的更改可能会更加繁琐.

  • 听起来像是一个确认`:%s /.../.../ gc`类型命令的正则表达式可能更接近你想要的地方 (2认同)

Fac*_*sco 12

我经常使用另一个注册表,将您需要的行复制到某个命名注册表"ay,然后从那里粘贴"ap


Jar*_*Par 11

粘贴Vim中的选区时,它将使用所选内容替换默认寄存器.如果粘贴选择是擦除剪贴板寄存器的内容,那么很可能你的.vimrc中有以下行

set clipboard=unnamed
Run Code Online (Sandbox Code Playgroud)

一种选择是删除它并使用显式剪贴板寄存器 "+

另一种选择是使用任何其他明确命名的寄存器(az).在第一次粘贴之后将线条拉回到"c例如然后用于"cp从那里粘贴.


too*_*pay 8

使用np哪里n是您要粘贴线的时间数,例如3p将粘贴3行.

  • 如果要将相同的行粘贴到非连续的行上,则不起作用. (6认同)

jac*_*uan 6

代替使用复制/粘贴,通常最好使用文本对象命令ciw来更改内部单词。该方法的优点是可以使用.repeat命令轻松重复。

  1. yiw 提取内部单词(在光标下方复制单词,说“第一个”)。
  2. ...将光标移动到另一个单词(例如“ second”)。
  3. ciw<C-r>0 更改“第二”,将其替换为“第一”(是Ctrl-R)。
  4. ...将光标移动到另一个单词(例如“第三”)。
  5. . 更改“第三”,将其替换为“第一”。


em_*_*_ma 5

在 2023 年,您可以使用P代替p,这将允许您继续粘贴“猛拉”的选择。