vim是如何选择当前word的多个示例并更改它们的?

qqrboqgw  于 2023-04-30  发布在  其他
关注(0)|答案(4)|浏览(152)

任何熟悉Sublime Text的多光标功能的人都会认识到执行以下操作的模式:按下热键多次以选择光标下单词的多个示例,并为这些示例中的每一个自动创建新光标;然后同时编辑每个示例,e.例如,用另一个词或任何你想要的词替换当前的词。
vim可以通过plugin使用多光标功能。在使用这个插件之前,我想(作为一个新的vim用户)检查一下是否有一个更像vim的方法来完成同样的任务。
例如,我知道我可以使用:s命令来执行搜索和替换(根据here指令),但这需要我(1)键入我想要替换的单词(或使用<C-r><C-a>快捷方式),而不是简单地使用当前单词和(2)定义一个范围。也许这是原生的vim方式,也许(可能!还有一种方法我不知道。
什么是原生vim方式?

pvcm50d1

pvcm50d11#

我使用*gn.进行更改。

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

注意:如果你有很多更改,那么使用替换命令可能会更好。
有一个很好的Vimcasts插曲关于gn运动:Operating on search matches using gn
有关更多帮助,请参阅:

:h *
:h gn
:h .
6fe3ivhb

6fe3ivhb2#

您可以通过按q<letter>在Vim中录制宏。宏可以包含n命令来搜索单词的下一个示例。您也可以在录制时进入插入模式(e.例如,使用具有诸如iw的运动的c命令来替换当前字)。按q停止录制,然后按@<letter>重播宏一次。在此之后,您可以使用@@来重复宏,次数不限。

w1e3prcc

w1e3prcc3#

在等待其他答案的同时,我将发布我在等待vimMaven回答的同时正在进行的实验:

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

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

z9smfwbn

z9smfwbn4#

您可以使用此命令选择和更改单词。对于Vim的各种集成,它可能工作不同,但我使用它与VS代码,它改变了单词,当我按Enter时,它将进行更改。
:%s/old_word/newWord

相关问题