Vim-选择当前单词的多个实例并同时更改-是否对所有搜索结果执行操作而不使用替换?

时间:2018-07-27 09:22:37

标签: vim sublimetext3

我已经阅读了问题:What's the vim way to select multiple instances of current word and change them?

不确定我是否做错了什么,但是想知道如何同时更改单词(或搜索结果)的多次出现。

给出块:

EXAMPLE_VAR = foo
bar = EXAMPLE_VAR
baz = EXAMPLE_VAR + 1000

如果我想将所有出现的EXAMPLE_VAR更改为小写的example_var,请阅读以下内容:

  1. 将光标移动到第一个EXAMPLE_VAR
  2. * 选择单词
  3. N 后退
  4. g n 以可视模式选择单词
  5. u 转换为小写
  6. n 转到下一个并根据需要重复

是否有一种方法可以使操作在所有搜索结果上自动重复? (我知道我可以使用替换或搜索和替换来全局执行此操作,但这需要键入所有变量名等)-这只是我发现Sublime拖慢我速度的几件事之一,我会简单地做到这一点:

  1. Cmd + D 选择单词,重复几次以选择出现的位置
  2. Cmd + K L 同时更改所有内容

2 个答案:

答案 0 :(得分:3)

guip

与提供的示例完全一样。

如果您真的错过了Sublime的多个游标功能,则可以到处寻找插件。

答案 1 :(得分:1)

要回答上述问题,请使用递归宏:

一旦您搜索了EXAMPLE_VAR,就会像这样:

qaqqanguw@a

但这不是最佳解决方案。 CTRL-R CTRL-W可以为您提供帮助,它将光标下的单词复制到命令行。因此,/<CTRL-R><CTRL-W>*的作用相同。

然后很容易使用全局命令:

:g/<CTRL-R><CTRL-W>/norm /<CTRL-R><CTRL-W>guw

或替代(感谢Marth):

:%s/<CTRL-R><CTRL-W>/\L&/g

正如Marth所指出的那样,如果您已经搜索过单词,则可以将示例中的/<CTRL-R><CTRL-W>/替换为//,而后者仅使用最后一次搜索(在全局命令的第二部分中)您将使用ng而不是//)。