假设我有这个文本: br />
我想拉动
foo
并将bar
换成我以前拉过的东西。拉动
foo
之后,我看到以下选项: 将光标放在带有
bar
的w
上将
foo
放在带有bar
的P
前面将光标放在其余
b
的bar
上并删除带有的单词de
选项2
用
w
将光标放在条上使用
de
擦除bar
将寄存器内容0使用
"0P
(因为我已擦除bar
,因此使用简单的foo
无法再访问p
)两种方式对我来说似乎都过于复杂,我敢肯定有一种更有效的方法可以完成此操作但我找不到方法。这个想法是将delete和put动作合并为一个,或者至少避免将已删除的单词保留在yank寄存器中,以便我可以用简单的
p
放置所需的单词。我也知道用
R
触发的替换模式,但是它不允许放置被拉扯的内容。TL; DR:如何用yank寄存器的内容替换单词?
#1 楼
假设您已经用foo
或类似的东西拉紧了ye
,并且光标位于foo
上的某个位置,则可以使用Wvep
:显然是可选的,并取决于当前光标的位置); W
启动可视模式; bar
转到单词的结尾(也可以使用动作,例如v
); e
粘贴iw
;这将替换当前的视觉选择(放置在未命名的寄存器p
中)。#2 楼
我找到了另一种方法,它与选项2有点类似,但是它的优点是不会弄乱寄存器的状态。这个想法是使用“黑洞”寄存器”:可通过
"_
访问此寄存器,该寄存器具有可以写入但不能从中读取的特殊性,因此,该寄存器就像一个黑洞,使进入其中的所有内容都完全消失。在这里我们可以使用它,即使删除foo
后,bar
仍保留在yank寄存器中。将foo
与bar
(或任何需要的当然词)一起使用使用“黑洞寄存器”删除带有
W
的bar
从带有
"_de
的拉动寄存器中放入foo
。自从P
进入黑洞以来,猛拉寄存器仍然包含foo
。了解黑洞寄存器,我想有些人可能会对它有所了解。#3 楼
转到“ foo”的开头。按
yiw
。会拉动内部单词。按字母
w
转到“栏”。然后选择它并拉回:viw"0p
我经常使用
ciw
和yiw
。评论
使用诸如iw之类的文本对象很有趣,但是您的解决方案实际上与@CarpetSmoker的解决方案相同:直观地选择第二个单词,然后放入第一个单词。我还认为您的解决方案将使用简单的p而不是使用“ 0寄存器”。
–statox♦
2015年5月25日16:05
#4 楼
当光标在单词上的任意位置时,
yiw
-拉动单词并将其存储在0
寄存器中。转到要替换的目标词
ciw
将删除该词并将您置于插入模式。ctrl-r
。将弹出一个"
询问要调用的寄存器。0
将粘贴被拉出的单词。存储在0
寄存器中。请参阅:registers
以查看存储的缓冲区。这似乎是一个漫长的过程,恕我直言,这为更复杂的寄存器技巧打开了大门。
评论
您可能对以下vimcast情节感兴趣:从Visual模式粘贴和使用exchange.vim交换文本的两个区域
– Peter Rincker
15年5月19日在23:48