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


98

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

我想删除整个单词,而不考虑光标位置(当然在单词内)。

Answers:


164

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

在Vim中,“ inner”和“ a”命令非常有用,也可以在{}块内尝试“ ci {”,如果也希望删除{}字符,也可以尝试“ ca {”。要将这些命令翻译成英文以更好地记住它们,请尝试:“更改内部{块”和“更改{块”。

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


可以使用“ caw”代替“ ciw”相同的功能。
09年

“ caw”和“ ciw”将替换整个单词,而简单的“ cw”将从当前光标位置更改为当前单词的末尾。
德鲁斯蒂芬斯

正如jinxed_coders评论所提醒的,我将答案从从“ co {”到“ ca {”的内容进行了编辑。我以前的定制将“(a)<>”命令实现为“(o)uter <>”命令。
Kaali

19
ciw并且caw不完全相同:ciwcaw删除单词,也删除尾随空格。
罗伯托·邦瓦莱特2009年

5
:help在vim中对象以了解有关这些选择的更多信息。
亚伦

19

回答您的后续问题: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.

3
一个人怎么会连续多次呢?每次粘贴时,缓冲区中都会填充我粘贴的单词。
Ben Gartner

1
@BenGartner在Vim Tips Wiki上发现了此问题:yiw用于复制当前单词,将光标放在要替换的单词上,使用ciw<C-r>0。之后,您可以将光标放在下一个单词上,并用于.重做替换。
siegi 2013年

@BenGartner如果您要做的就是用WORD_B替换WORD_A的所有实例,那么您只需使用vim的ex模式:%s/a/b/ga可以是精确的文本,也可以是正则表达式,b这就是您将替换为的所有内容a。您可以使用vim的/模式测试正则表达式。%如果您不想在所有行上都替换,请替换为行号或范围。
Braden Best

8

对于第二个问题: bPldw

这将按顺序将您带到当前单词的开头,在光标之前插入默认寄存器,转到下一个字符(使您越过刚插入的文本的结尾),然后删除其余部分这个单词。


5
这也会删除单词后面的空格。应该是bPlde
0x89

10
不,应该是viwp
aehlke

3

对于第一个问题,bcw也可以。它的意思是“ b确认单词开头,change word”。但是我认为ciw更令人难忘,这意味着“ change inner word”,仅一步之遥。

关于“替换粘贴”的第二个问题,我的解决方法是"_diwP。它delete inner wORD到注册你不在乎和pASTE默认寄存器的内容。优点是您可以多次粘贴默认寄存器,因为它不会被污染。这是一个杂物间,因此我将其映射为nnoremap ,r "_diwP


2

或者,您也许可以使用键序列bdwi删除当前单词并进入INSERT模式。


1
您可以使用bcw转到当前单词的开头,然后更改单词,从而退出插入模式。
汉克·盖伊2009年

如果光标已经位于单词的第一个字符上,则最终将删除前一个单词。
沃伦·佩纳

3
@WarrenPena在这种情况下,只需使用即可dwi。请注意不要让警察注意,因为DWI在大多数州都是非法的。
Braden Best
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.