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

问题描述 投票:0回答:5

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

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

例如,我知道我可以使用

:s
命令进行搜索和替换(按照此处的说明),但这需要我 (1) 输入我想要替换的单词(或使用
<C-r><C-a> 
这样做的快捷方式),而不是简单地使用当前单词和 (2) 定义一个范围。也许这是 vim 的原生方式,也许(可能!)还有另一种我不知道的方式。

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

vim sublimetext2
5个回答
76
投票

我使用

*
gn
.
进行更改。

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

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

有一个关于 gn 运动的精彩

Vimcasts
剧集:使用 gn 对搜索匹配进行操作。

更多帮助请参阅:

:h *
:h gn
:h .

2
投票

您可以通过按

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


1
投票

在等待其他答案的同时,我将在等待vim专家回答的同时发布我正在尝试的内容:

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

从当前行(

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


1
投票

您可以使用此命令来选择和更改单词。它对于 vim 的各种集成可能会有所不同,但我将它与 VS code 一起使用,它会更改单词,当我按 Enter 时,它会进行更改。

:%s/old_word/newWord


0
投票
  • 使用
    viw
    选择单词。
  • 使用
    Ctrl/Cmd+D
    选择下一个,您将看到多个亮点。
  • ESC
    退出可视模式,您仍然会看到多个光标。
  • ciw
    i
    修改多个。
© www.soinside.com 2019 - 2024. All rights reserved.