如何替换光标下的单词?

205

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

所以,是否有更简单的组合键来替换光标下的单词,而不是使用dw然后i,再输入单词,最后按Esc呢?

6个回答

355
ciw

更改内部单词将更改光标下的整个单词。与以下进行比较:

cw

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


1
如果单词中包含点或斜杠(例如/usr/bin/bash1222.333),应如何处理?看起来vim将/.解释为单词的结尾,并且无法选择整个字符串。 - Alexander Cska
4
@AlexanderCska,你可能想尝试使用 cWciW(注意大写 W)。 - ShellCode
谢谢,完美地工作了 :) - Alexander Cska

121

我经常发现自己想要用从其他地方复制的另一个单词替换当前的单词。但是,使用其他解决方案的问题在于,如果您尝试更改一个单词,那么您下一次粘贴的内容将是您使用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". 

希望这就是你在寻找的。


9
如果只需要替换一次,它的效果很好。如果我需要将几个“second”替换为“first”(在你的例子中),那么在第一次替换后,复制的单词就变成了“second”。 - ViFI
3
@ViFI,如果你想要粘贴多次,那么使用viw"0p而不是仅仅使用viwp会更加有帮助。基本上,这两者的作用相同,但是在粘贴之前加上"0可以避免覆盖缓冲区。 - Peter

34

ciw

c   change
iw  inner word

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


另请参阅Vim文档以供参考:

:help c
:help text-objects

22
如果你想把一个词用之前yanked的词替换掉,有另一种解决方法:viwp(在你yanked第一个词后)。

ciw 移除前面的单词,并将光标置于其所在位置以进行插入。然后,你可以使用 ctrl+r, 0 插入寄存器 0 的内容(其中包含先前yanked的单词)。

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

这比使用viwp更好,因为在第一次使用后,您可以使用.重复执行替换。它也不会切换到可视模式并短暂地突出显示。


1
不确定您所说的不更改模式是什么意思,相反的情况似乎是这样,但也许这就是您想要的,保持插入模式。 但一个很大的优点是,与 viwp 相反,这可以通过一次复制来完成多次操作。谢谢! - Palo
哦,你说得对,我本来想进入可视模式的,编辑了一下。我没意识到这是 viwp 的限制 - 即使使用 . 也不能复制它。 - Connor
3
当我们已经取走替换词时,这无疑是最佳解决方案。 - mljrg
1
这就是答案!能够在这里使用 . 真是太棒了! - izzy

1

1
那个可以用,但它只会修改光标右侧的字符。 - Brian Agnew

0
要复制光标下的单词,请按:bvey 要替换光标下的单词,请按:bvep

如果您需要进行多次替换,请使用带确认的搜索和替换命令::%s!first!second!gc - Marek Stepanek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接