Vim:复制然后粘贴多次

Vim:复制然后粘贴多次

我使用vim中的突出显示模式来复制一些字符。然后我想粘贴不止一次。我目前的技术效果不太好。

示例文本:Linux Solaris Irix HP-UX

假设我想复制单词Linux,然后粘贴到Solarisand Irix

  1. 将光标L置于Linux
  2. 命令v(用于视觉 hilite),然后e(用于词尾),然后y(用于复制/复制)
  3. 现在Linux在我的“vim 剪贴板”上
  4. 将光标移至Sin Solaris(第一个实例)
  5. 命令v(用于视觉 hilite),然后e(用于词尾),然后p(用于粘贴)
  6. 文本现在是:Linux Linux Irix HP-UX,但现在Solaris在我的“vim 剪贴板”上
  7. 将光标移至Iin Irix(第二个实例)
  8. 命令v(用于视觉 hilite),然后e(用于词尾),然后p(用于粘贴)
  9. 文本现在:Linux Linux Solaris HP-UX这不是我所期望的。

我通过鼠标使用 highlite/paste(通过 X 终端)。当然,我可以做得更好。如何?

答案1

我会用这种方式做到这一点(对很多粘贴来说确实有用):

  1. 进入单词的某处Linux,然后"ayiw复制该单词
    • "a选择寄存器“a”
    • y用于复印
    • i指定我们处于“in”(单词、段落……)
    • w选择这个词
  2. 到达下一个单词w(或单词中的某个位置)
  3. 按时间粘贴并将其另存为宏qbdiw"aPq
    • qb开始在寄存器“b”中录制宏
    • d用于删除
    • i指定我们处于“in”(单词、段落……)
    • w选择这个词
    • "a选择寄存器“a”(之前保存的)
    • P粘贴光标前的单词
    • q停止录制宏
  4. 然后要第一次使用宏,请转到下一个单词w并按@b
  5. 最后,这是可以看到此方法的优点的地方,找到要替换的每个单词并按@@

暗示:wbyW替换qbdiw"aPq为用标点符号选择单词,例如HP-UX

问题:当该单词是行中的最后一个时,它将删除该单词之前的空格。

答案2

我经常需要这个,我编写了一个插件来简化并允许最大速度:替换为寄存器

该插件提供了一个二合一gr命令,可以用寄存器的内容替换 {motion} / 文本对象、整行或当前选择覆盖的文本;旧文本被删除到黑洞寄存器中,即它消失了。它透明地处理许多极端情况,并允许通过标准.命令快速重复。如果您不喜欢它,它的页面上有替代品的链接。

答案3

对你和我来说幸运的是,这个问题已经被回答了在 StackOverFlow 上。您可以p通过将以下内容添加到文件中来更改默认行为,使其对某些人来说更直观或更方便vimrc

xnoremap p pgvy

答案4

"0p在视觉模式下粘贴时您可能需要考虑。

参考号:help v_p

Move to L in Linux
ye     # Yank to end of word.
w      # Move to next word.
<C>ve  # Highlight Solaris.
"0p    # Paste Linux, Solaris ends up in unnamed register and Linux in 0
w      # Move to next word.
<C>ve  # Mark next word. (Or anywhere else)
"0p    # Paste Linux.

或者在这个确切的例子中,人们还可以:

定位L于Linux

yww<C>v2f 2p
# Or
yww<C>v2el2p
yw           # Yank Linux 
w            # Move to S in Solaris
<C>v2el      # Enter visual mode, highlight two * end, and l to consume space.
2p           # Paste Linux twice.

'<C>v2f '    # Alternative to <C>v2el

相关内容