当我不得不用一个我以前想过的单词替换一个单词时,我通常会使用一个对我来说似乎不自然的工作流程:

假设我有这个文本: br />
我想拉动foo并将bar换成我以前拉过的东西。

拉动foo之后,我看到以下选项:


将光标放在带有barw
foo放在带有barP前面
将光标放在其余bbar上并删除带有的单词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中)。


评论


您可能对以下vimcast情节感兴趣:从Visual模式粘贴和使用exchange.vim交换文本的两个区域

– Peter Rincker
15年5月19日在23:48

#2 楼

我找到了另一种方法,它与选项2有点类似,但是它的优点是不会弄乱寄存器的状态。

这个想法是使用“黑洞”寄存器”:可通过"_访问此寄存器,该寄存器具有可以写入但不能从中读取的特殊性,因此,该寄存器就像一个黑洞,使进入其中的所有内容都完全消失。在这里我们可以使用它,即使删除foo后,bar仍保留在yank寄存器中。将foobar(或任何需要的当然词)一起使用
使用“黑洞寄存器”删除带有Wbar

从带有"_de的拉动寄存器中放入foo。自从P进入黑洞以来,猛拉寄存器仍然包含foo。了解黑洞寄存器,我想有些人可能会对它有所了解。

#3 楼


转到“ foo”的开头。按yiw。会拉动内部单词。
按字母w转到“栏”。然后选择它并拉回:viw"0p

我经常使用ciwyiw

评论


使用诸如iw之类的文本对象很有趣,但是您的解决方案实际上与@CarpetSmoker的解决方案相同:直观地选择第二个单词,然后放入第一个单词。我还认为您的解决方案将使用简单的p而不是使用“ 0寄存器”。

–statox♦
2015年5月25日16:05

#4 楼



当光标在单词上的任意位置时,



yiw-拉动单词并将其存储在0寄存器中。



转到要替换的目标词



ciw将删除该词并将您置于插入模式。

ctrl-r。将弹出一个"询问要调用的寄存器。

0将粘贴被拉出的单词。存储在0寄存器中。请参阅:registers以查看存储的缓冲区。
这似乎是一个漫长的过程,恕我直言,这为更复杂的寄存器技巧打开了大门。