【问题标题】:Paste multiple times多次粘贴
【发布时间】:2011-11-02 02:22:18
【问题描述】:

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

我遇到的问题是,当我拉出一行并将其粘贴到另一行上时,“拉出”被我刚刚替换的行替换。现在,如果我想用同一行替换另一行,我必须返回并再次拉动它。

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

【问题讨论】:

    标签: vim copy paste


    【解决方案1】:

    我的 .vimrc 中有这个:

    xnoremap p pgvy
    

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

    【讨论】:

    • 聪明。 'p' 粘贴,'gv' 重新选择最初选择的内容。 'y' 再次复制。
    • @SibbsGambling,可能使用的是 Vim 7 之前的版本?然后升级 Vim,或者使用 v 代替 x (vnoremap)。 Vim 帮助文件version7.txt 说明 xmap 和 smap 出现在那个版本中。
    • @Benoit 嗯,我有 7.4.52,但 xnoremapvnoremap 都不起作用
    • 为什么这不是默认行为??
    • 请注意,此重新映射有一个问题:如果您用较长的文本替换较短的文本,第二次粘贴时,它将存储较短的文本。 i.imgur.com/Nehm7fL.mp4
    【解决方案2】:

    "0 应该有你的 yank 的内容。打字有点繁琐,但"0p 应该做你想做的。

    或者,不要选择并替换前面的旧行。如果您通过搜索找到这些行,只需一遍又一遍地点击n.(在初始p之后),然后当它们全部粘贴后,执行ndd,然后根据需要执行尽可能多的n.s。

    在迁移到 Vim 时,我需要做出的最大心理转变是弄清楚如何按顺序应用组编辑。 IE。而不是在一行上做一堆编辑,然后在另一行上做一堆相同的编辑,我会在一堆行上做第一次编辑(使用. 效果很好),然后第二次编辑一堆行等。或者,使用宏可能会有所帮助,因为它们很棒,但有时要正确处理“复杂”的更改会有点乏味。

    【讨论】:

    • 听起来像是带有确认 :%s/.../.../gc 类型命令的正则表达式可能更接近您想要的地方
    • @Milimetric +1 不知道你可以这样确认。
    • 赞成,因为宏可以使这成为非问题。只需进行一次编辑,您就可以执行5@m 之类的操作(对于名为m 的宏)
    • 感谢您的精彩解释。现在我在 ~/.vimrc 中使用xnoremap p "0p
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      当您在 Vim 中粘贴选择时,它将用选择的内容替换默认寄存器。如果粘贴所选内容正在清除剪贴板寄存器的内容,那么很可能您的 .vimrc 中有以下行

      set clipboard=unnamed
      

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

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

      【讨论】:

      • 实际上默认(这里,在 Ubuntu 上)是 clipboard=autoselect;不过,感谢迄今为止最优雅的答案。
      【解决方案5】:

      使用np 其中n 是您要粘贴行的次数,例如3p 将粘贴3 行。

      【讨论】:

      • 当您想将同一行粘贴到不连续的行上时不起作用。
      • @Tobu 但它确实回答了这个问题的标题“你如何粘贴多次”
      【解决方案6】:

      通常最好使用诸如ciw 之类的文本对象命令来更改内部单词,而不是使用复制/粘贴。这种方法的优点是可以使用. repeat 命令轻松重复。

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

      【讨论】:

      • ciw<C-r>0 在我的情况下不起作用。 ciw 更改为插入模式,<C-r> 变得无用。对此有简单的解释吗?这可能与文本编辑器有关(我在 RStudio 中使用的不是纯 VIM,而是 VIM 键盘绑定)
      • @Bushroot <C-r> 旨在用于插入模式,因为它是您在不离开插入模式的情况下从寄存器粘贴的方式——即在 Vim 中;我不熟悉 RStudio,但我猜你是对的,他们还没有实现这个特定的键绑定。
      • @Sean H:是的。他们没有实现键绑定。它在 VIM 中运行良好,甚至在其他程序(例如 Visual Studio Code)中也可以使用 VIM 绑定。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多