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

Posted

技术标签:

【中文标题】如何替换光标下的单个单词?【英文标题】:How to replace a single word under cursor? 【发布时间】:2012-12-23 09:34:08 【问题描述】:

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

那么除了使用dw然后i然后是单词然后Esc,有没有更简单的组合来替换光标下的单词?

【问题讨论】:

【参考方案1】:
ciw

(change inner word) 将改变光标下的整个单词。比较

cw

这只会改变当前光标位置的单词。有关详细信息,请参阅 this SO question/answer。

【讨论】:

如果单词包含点或斜线(例如/usr/bin/bash1222.333),如何处理?看起来 vim 将 /. 解释为单词的结尾,并且不会选择整个字符串。 @AlexanderCska 你可能想试试cWciW(注意大写W) 谢谢你,工作完美:)【参考方案2】:

ciw

c   change
iw  inner word

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


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

:help c
:help text-objects

【讨论】:

【参考方案3】:

试试cw - 就像“换词”一样。

使用http://linuxmoz.com/vi-commands-cheat-sheet/ 或任何其他备忘单作为参考。

【讨论】:

可行,但只会修改光标右侧的字符【参考方案4】:

我经常发现自己想用从其他地方抽出的另一个词来替换一个词。其他解决方案的问题是,如果您尝试更改一个单词,那么您的下一个粘贴将成为您使用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". 

希望这就是您想要的。

【讨论】:

它工作得很好,但前提是必须更换 once。如果我必须替换几个second' by first`(在您的示例中),则在第一次替换后复制的单词变为second @ViFI, viw"0p 而不仅仅是 viwp 如果要粘贴多次,会为您提供帮助。基本上和viwp一样,但是粘贴前用"0,不会覆盖缓冲区【参考方案5】:

如果你想用之前抽出的词来改变一个词,viwp 的另一个解决方案是(一旦你抽出第一个词)。

ciw 删除前一个单词并将您置于插入模式。但随后您可以使用ctrl+r, 0 插入寄存器 0 的内容(其中包含先前提取的单词)。

所以:

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

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

【讨论】:

不确定你的意思是它不会改变模式,相反似乎是这种情况,但也许这就是你想要的,保持插入模式。但是一个很大的优势是(与viwp相反)只需一次拉动就可以完成多次。谢谢! 哦,你是对的,我正在考虑进入可视模式,已编辑。我没有意识到这是viwp 的限制——即使. 也不会复制它。 当我们已经抽出替换词时,这是迄今为止最好的解决方案。 这就是答案!能够使用 . 非常棒!【参考方案6】:

按光标复制单词:bvey

要替换光标下的单词:bvep

【讨论】:

以上是关于如何替换光标下的单个单词?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取光标下的单词?

如何获取光标下的单词?

如何将此正则表达式替换从替换单个单词更改为替换单词数组?

如何在 Vim 中的单个命令调用中从光标位置开始并环绕文件末尾进行全局搜索和替换?

如何使用 REGEXP_REPLACE 替换特定条件下的重复单词?

如何在多行中替换单个字线?