在正常模式下如何用拉动的单词替换单词


25

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

假设我有这段文字:

foo bar buzz

我想拉动foo并替换bar为以前拉过的东西。

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

选项1

  1. 将光标放在barw

  2. foo前面的barP

  3. 将光标放在b其余的上,bar然后用删除该单词de

选项2

  1. 将光标放在 w

  2. 使用de来擦除bar

  3. 将寄存器0的内容放入"0P(因为我已经擦除了barfoo所以不再可以通过简单的来访问它p

这两种方法对我来说似乎都过于复杂,我敢肯定有一种更有效的方法来完成此操作,但我找不到方法。这个想法是只将delete和put动作组合在一起,或者至少避免将已删除的单词保留在yank寄存器中,这样我就可以将所需的单词简单地放入p

我也知道替换模式触发了,R但是它不允许放置被拉的东西。

TL; DR:如何用yank寄存器的内容替换单词?

Answers:


31

假设您已经fooye或类似的东西拉过,并且光标在上的某个位置foo,则可以使用Wvep

  • W转到bar(这显然是可选的,将取决于当前光标位置);
  • v 启动可视模式;
  • e转到单词的结尾(您也可以在此处使用其他动作,例如iw);
  • p粘贴foo; 这将替换当前的视觉选择(放置在未命名的寄存器中"")。


6

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

想法是使用“ 黑洞寄存器 ”:该寄存器可通过访问,"_并且具有可以写入但不能从中读取的特殊性,因此,就像黑洞一样,该寄存器使进入其中的所有内容完全消失。在这里我们可以使用它,即使删除也可以foo保留在yank寄存器中bar

使用此解决方案,拉动之后的麻烦foo将是:

  • barW(或课程的任何需要的话)
  • 使用“黑洞寄存器”删除bar"_de
  • foo从与猛拉寄存器Pfoo自从bar进入黑洞以来,猛拉寄存器仍然包含。

我不确定这是否比@Carpersmoker的解决方案更好(就vimgolf @Carpetsmoker而言),但我不了解黑洞寄存器,我认为有些人可能对此有所了解。


3
  1. 转到“ foo”的开头。按yiw。这使内在的单词更加吸引人。

  2. 转到“酒吧”按字母w。然后选择它并拉回:viw"0p

我使用ciwyiw不少。


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

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

    • yiw-拔出单词并将其存储在0寄存器中。
  • 转到要替换的目标词

    • ciw 会删除该单词并将您置于插入模式。
    • ctrl-r"将会弹出一个窗口,询问要调用的寄存器。
    • 0 将粘贴被拉的单词。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.