我使用vim中的突出显示模式来复制一些字符。然后我想粘贴不止一次。我目前的技术效果不太好。
示例文本:Linux Solaris Irix HP-UX
假设我想复制单词Linux
,然后粘贴到Solaris
and Irix
。
- 将光标
L
置于Linux
- 命令
v
(用于视觉 hilite),然后e
(用于词尾),然后y
(用于复制/复制) - 现在
Linux
在我的“vim 剪贴板”上 - 将光标移至
S
inSolaris
(第一个实例) - 命令
v
(用于视觉 hilite),然后e
(用于词尾),然后p
(用于粘贴) - 文本现在是:
Linux Linux Irix HP-UX
,但现在Solaris
在我的“vim 剪贴板”上 - 将光标移至
I
inIrix
(第二个实例) - 命令
v
(用于视觉 hilite),然后e
(用于词尾),然后p
(用于粘贴) - 文本现在:
Linux Linux Solaris HP-UX
这不是我所期望的。
我通过鼠标使用 highlite/paste(通过 X 终端)。当然,我可以做得更好。如何?
答案1
我会用这种方式做到这一点(对很多粘贴来说确实有用):
- 进入单词的某处
Linux
,然后"ayiw复制该单词- "a选择寄存器“a”
- y用于复印
- i指定我们处于“in”(单词、段落……)
- w选择这个词
- 到达下一个单词w(或单词中的某个位置)
- 按时间粘贴并将其另存为宏qbdiw"aPq
- qb开始在寄存器“b”中录制宏
- d用于删除
- i指定我们处于“in”(单词、段落……)
- w选择这个词
- "a选择寄存器“a”(之前保存的)
- P粘贴光标前的单词
- q停止录制宏
- 然后要第一次使用宏,请转到下一个单词w并按@b
- 最后,这是可以看到此方法的优点的地方,找到要替换的每个单词并按@@
暗示:将wbyW替换qbdiw"aPq为用标点符号选择单词,例如HP-UX
问题:当该单词是行中的最后一个时,它将删除该单词之前的空格。
答案2
我经常需要这个,我编写了一个插件来简化并允许最大速度:替换为寄存器。
该插件提供了一个二合一gr
命令,可以用寄存器的内容替换 {motion} / 文本对象、整行或当前选择覆盖的文本;旧文本被删除到黑洞寄存器中,即它消失了。它透明地处理许多极端情况,并允许通过标准.
命令快速重复。如果您不喜欢它,它的页面上有替代品的链接。
答案3
答案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