2009-09-04 105 views
86

在正常模式下,我可以打Ctrl + E其删除当前字的其余部分,进入插入模式。如何在Vim中删除单词并进入插入模式?

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

回答

146

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

在Vim中,“内部”和“a”命令很棒,也可以在{}块内尝试“ci {”,或者如果您也希望删除这些{}字符,可以尝试“ca {”。要将这些命令翻译成英文以更好地记住它们,请尝试:“更改内部{块”和“更改块”。在http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

+0

“caw”可以用来代替“ciw”相同的功能。 – Amjith 2009-09-04 21:52:42

+0

'caw'和'ciw'将替换整个单词,只是'cw'将从当前光标位置改变为当前单词的结尾。 – 2009-09-05 17:00:47

+0

我编辑答案从讲述“co {”到“ca {”,由jinxed_coders评论提醒。我的旧定制将“(a)<>”命令实现为“(o)uter <>”命令。 – Kaali 2009-09-07 04:34:00

8

对于第二个问题:bPldw

这种意志,才能,带你到当前单词的开头,插入光标前面的默认寄存器,进入下一个字符(带你过去刚刚插入的文本末尾),并删除该单词的其余部分。

+5

这也删除单词后的空格。应该是'bPlde'。 – 0x89 2009-09-04 18:25:46

+9

不,应该是'viwp' – aehlke 2010-10-05 10:55:15

2

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

+1

您可以使用'bcw'去当前单词的开头,然后改变单词,这会让您插入模式。 – 2009-09-04 13:24:26

+0

如果您的光标已经在单词的第一个字符上,那么最终将删除前一个单词。 – 2009-09-10 14:16:01

+3

@WarrenPena在这种情况下,只需使用'dwi'。请注意,警察不会注意到,因为DWI在大多数州都是非法的。 – 2014-08-21 18:19:34

18

回答您的后续问题:viwp

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

如何连续多次执行此操作?每次粘贴时,缓冲区都会填充粘贴的单词。 – 2012-04-05 21:08:44

+1

@BenGartner在[Vim Tips wiki]找到了这个(http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text#Alternate_method):使用'yiw'复制当前单词,将光标置于要替换的单词上,使用' ciw 0'。之后,您可以将光标放在下一个单词上,并使用'.'来重做替换。 – siegi 2013-09-19 20:45:42

+0

@BenGartner如果你所要做的只是用WORD_B替换WORD_A的所有实例,那么你只需使用vim的ex模式':%s/a/b/g'。 'a'可以是精确的文本,也可以是正则表达式,'b'就是你将会替换'a'的所有匹配项。你可以用vim的'/'模式测试正则表达式。如果您不想在所有行上进行替换,请将'%'替换为行号或范围。 – 2014-08-21 18:11:02

2

对于第一个问题,bcw也行。这意味着“b ack到词的开头,c hange w ord”。但我认为ciw更令人难忘,意思是“c hange i nnd w ord”,只有一步。

对于“替换使用粘贴”的第二个问题,我的解决方案是"_diwP。它d elete i nner w ord寄存器你不关心和p aste默认注册的内容。一个好处是你可以多次粘贴默认寄存器,因为它不会被污染。这是一个小复杂的,所以我把它映射为nnoremap ,r "_diwP