粘贴多次


93

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

我遇到的问题是,当我拔出一行并将其粘贴到另一行上时,“拔出”将替换为我刚刚替换的行。现在,如果要用同一行替换另一行,则必须重新备份并重新拉动它。

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

Answers:


106

我的.vimrc中有这个:

xnoremap p pgvy

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


28
聪明。“ p”粘贴,“ gv”重新选择最初选择的内容。再次复制。
2011年

@SibbsGambling,可能使用的是Vim 7之前的版本?然后升级Vim,或使用v代替x(vnoremap)。Vim帮助文件version7.txt指出xmap和smap出现在该版本中。
Benoit

1
@Benoit嗯,我有52年4月7日,但既不xnoremap也不vnoremap作品
Sibbs赌博

8
为什么这不是默认行为?
塞斯(Seth)

27

"0应该有你的扬子的内容。键入会比较乏味,但是"0p应该执行您想要的操作。

另外,也不要在前面选择并替换旧的行。如果您通过搜索找到了这些行,只需n.一遍又一遍地打(在首字母之后p),然后将它们全部粘贴,ndd然后根据需要添加尽可能多的n.s。

迁移到Vim时,我需要做的最大的决定就是弄清楚如何顺序应用组编辑。也就是说,与其在一行上进行一堆编辑,然后在另一行上进行一堆相同的编辑,不如在一行上进行第一次编辑(.效果很好),然后在一行上进行第二次编辑另外,宏的使用可能会有所帮助,因为它们很棒,但有时需要稍微繁琐的工作才能正确处理“复杂”的更改。


2
听起来像是使用带有确认:%s/.../.../gc类型命令的正则表达式可能更接近您想要的地方的地方
Milimetric 2012年

@Milimetric +1不知道您可以确认那样。

1
投票是因为宏可以使它成为非问题。只是让编辑一次,你可以这样做5@m(名为宏m
skatenerd

谢谢你的解释。现在,我xnoremap p "0p在〜/ .vimrc中使用
nexayq,


11

在Vim中粘贴选定内容时,它将用选定内容替换默认寄存器。如果粘贴选择内容将清除剪贴板寄存器的内容,则很可能在.vimrc中包含以下行

set clipboard=unnamed

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

另一个选择是使用其他任何显式命名的寄存器(az)。在第一次粘贴后,将线拉回到"c例如,然后用于"cp从那里粘贴。


实际上,默认值(在Ubuntu上是默认值)是剪贴板=自动选择。还是要感谢到目前为止最优雅的回答。
东武

8

使用npwhere n是您要粘贴行的时间,例如3p将粘贴3行。


7
当您想将同一行粘贴到非连续行上时不起作用。
东武

@Tobu,但它确实回答了“如何粘贴多次”这个问题的标题
icc97

6

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

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

1
ciw<C-r>0在我的情况下不起作用。ciw更改为<C-r>无用的插入模式。对此有一个简单的解释吗?可能与texteditor有关(我不是在RStudio中使用pur VIM,而是在VIM中使用VIM键盘绑定)
Bushroot,

@Bushroot <C-r>旨在用于插入模式,因为它是从寄存器中粘贴而无需离开插入模式的方式-在Vim中,即;我不熟悉RStudio,但我猜您是对的,他们还没有实现此特定的键绑定。
昆虫的

@Sean H:是的。他们没有实现键绑定。它可以在VIM中正常工作,甚至可以与其他程序中的VIM绑定(例如Visual Studio Code)一起使用。
Bushroot,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.