如何替换光标下的单个单词?


144

如何在Vim中替换光标下的单词。

因此,有没有更简单的组合来替换光标下的单词,而不是先使用dwthen然后i再使用单词Esc

Answers:


251
ciw

(更改内部单词)将更改光标下方的整个单词。与之比较

cw

这只会从当前光标位置更改单词。有关更多信息,请参见此SO问题/答案。


如果单词包含点或斜杠(例如/usr/bin/bash1222.333),该如何处理 ?看起来像vim解释/.作为单词的结尾,并且不会选择整个字符串。
亚历山大·斯卡

85

我经常发现自己想用一个我从其他地方提出来的单词替换一个单词。其他解决方案的问题在于,如果您尝试更改一个单词,那么下一个粘贴将您使用删除的那个单词cw

尝试以下方法:

1 "This first word should overwrite the second"

yiw     yank inner word (copy word under cursor, say "first").
...     Move the cursor to another word (say "second").
viwp    select "second", then replace it with "first". 

希望这就是您想要的。


7
它工作得很好,但仅在必须进行替换的情况下才可以once。如果我必须先替换几个second' by 首字母(在您的示例中),则复制的单词将second在首个替换之后变为。
ViFI

32

ciw

c   change
iw  inner word

这将删除光标下方的单词(即使光标位于单词中间的某个位置)并进入插入模式。


另请参见Vim的文档以供参考:

:help c
:help text-objects

17

如果您想用之前被拉的单词来更改单词,则有另一种解决方案viwp(一旦您拉了第一个单词)。

ciw删除前一个单词并使您进入原来的插入模式。但是随后您可以ctrl+r, 0用来插入寄存器0的内容(其中包含先前被选中的字)。

所以:

yiw
[move to next word]
ciw
ctrl+r
0

这比起viwp使用效果更好,因为在首次使用后,您可以重复使用进行替换.。它还不会切换到可视模式并突出显示。


1
不知道您的意思是它不会更改模式,似乎相反,但这也许就是您想要的,保持在插入模式。但是最大的好处是,viwp只需一次拉动就可以完成多次(与相反)。谢谢!
Palo

哦,您是对的,我当时正在考虑进入视觉模式,进行编辑。我没有意识到那是一个限制viwp-甚至.没有重复它。
康纳

3
当我们已经取消了替换词时,这是迄今为止最好的解决方案。
mljrg

1
这就是答案!可以使用的.功能很棒!
izzy

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.