如何在Vim中删除单词并进入插入模式?

Joe*_*nsn 92 vim

在正常模式下,我可以按Ctrl+ E,删除当前单词的其余部分并进入插入模式.

我想删除整个单词,无论光标位置如何(当然在单词内).另外 - 如何用默认寄存器中的任何内容替换当前字?

Kaa*_*ali 157

您可以通过键入"ciw"来删除光标所在的单词来使用"更改内部单词".

"内部"和"a"命令在Vim中很棒,也可以在{}块中尝试"ci {",如果你也希望删除{}字符,也可以尝试"ca {".要将这些命令翻译成英语以便更好地记住它们,请尝试:"更改内部{block"和"更改{block".

http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects上的文档

  • `ciw`和`caw`不完全相同:`ciw`只删除单词,`caw`也删除了尾随空格. (17认同)
  • **:帮助对象**在vim中阅读有关这些选择的更多信息. (4认同)
  • 仅供参考,我相信“caw”和“ca{”中的“a”代表“around” (3认同)

too*_*php 18

回答你的后续问题: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.
Run Code Online (Sandbox Code Playgroud)

  • 如何连续多次这样做?每次粘贴时,缓冲区都会填充我粘贴的单词. (3认同)

Han*_*Gay 8

对于第二个问题: bPldw

这将按顺序将您带到当前单词的开头,在光标前插入默认寄存器,转到下一个字符(将您带到刚刚插入的文本的末尾),并删除其余的这个单词.

  • 不,应该是`viwp` (10认同)
  • 这也删除了单词之后的空格.应该是`bPlde`. (5认同)

Jus*_*me0 5

对于第一个问题,bcw同样工作。它的意思是“b确认单词的开头,change word”。但我觉得ciw更难忘,意思是“ change inner word”,只是一步而已。

对于第二个问题“使用粘贴替换”,我的解决方案是"_diwP。它将命令d删除到您不关心的寄存器中,并使用默认寄存器的内容。一个优点是您可以多次粘贴默认寄存器,因为它不会被污染。它有点复杂,所以我将其映射为.iwpnnoremap ,r "_diwP