vim select 当前单词的多个实例并更改它们的方法是什么?

What's the vim way to select multiple instances of current word and change them?

任何熟悉 Sublime Text 的多光标功能的人都会认出执行以下操作的模式:多次按下热键以 select 光标下的单词的多个实例,并自动为每个光标创建一个新光标那些实例;然后同时编辑每个实例,例如用另一个词或任何你想要的替换当前词。

vim 通过 plugin 可以使用多光标功能。在使用该插件之前,我想(作为新 vim 用户)检查是否有更原生的 vim 方式来完成相同的任务。

例如,我知道我可以使用 :s 命令进行搜索和替换(根据说明 here),但这需要我 (1) 输入我想要的词替换(或使用 <C-r><C-a> 快捷方式),而不是简单地使用当前单词和 (2) 定义范围。也许这是本机的 vim 方式,也许(很可能!)还有另一种我不知道的方式。

那么原生的vim方式是什么?

您可以通过按 q<letter> 在 Vim 中录制宏。宏可以包含 n 命令来搜索单词的下一个实例。您还可以在录制时进入插入模式(例如,使用 c 命令和 iw 等动作来替换当前单词)。按 q 停止录制,然后按 @<letter> 重播宏一次。之后,您可以使用 @@ 重复宏,任意多次。

我使用 *gn. 进行更改。

  • Select 当前单词 * (返回 N
  • gn 动作更改单词。例如cgnfoo<esc>
  • 通过.命令重复

注意:如果您有很多更改,那么使用替换命令可能会更好。

有个不错的Vimcasts episode about the gn motion: Operating on search matches using gn.

如需更多帮助,请参阅:

:h *
:h gn
:h .

在等待其他答案的同时,我将post在等待vim专家回答的同时进行实验:

:.,$s/<C-r><C-a>/foobar/gc

从当前行(.)替换(s)到最后一行($)(用逗号表示行范围),使用<C-r><C-a> 组合键将当前单词复制到命令中,然后使用 gc 进行更改并确认,这样我就可以为每个实例点击 yes/no,然后在完成足够后退出。