Vim 转到下一个搜索结果并直观地选择它

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

经常,如果我有一个像

points.length - 1
这样的代码表达式,并且我想将其替换为变量(例如,命名为
target_idx
,那么我将定义该变量:

int target_idx = points.length - 1;

但现在我想用

points.length - 1
替换
target_idx
的所有实例。我知道我可以做到
:%s/points.length - 1/target_idx/g
,但我对我的正则表达式不太有信心,并且不想错误地替换
points.length - 11
points+length - 1
。 (我也知道非常神奇的搜索,但对它考虑/不考虑特殊字符的所有微妙之处也不是很有信心)

所以我想要的是能够通过

points.length - 1
搜索与
/points.length - 1
匹配的实例,然后使用
n
浏览搜索结果,然后用
target_idx
替换文本。

但是因为搜索的文本可能包含空格或其他字符,所以我不能简单地更改为单词的末尾

cE
,因为在我的示例中这只会更改
points.length

是否存在到达搜索文本末尾的文本动作?

这样我就可以走了

  1. n
  2. c<special text motion here>
  3. target_idx
  4. 从 1 开始重复。

我正在使用安装了 CoC 的 neovim,因此我对插件或语言服务器替换的更深入想法持开放态度,但这感觉应该是一个我不知道的简单文本动作。

vim neovim coc.nvim
2个回答
6
投票

我想你可以去

gn
:help gn
了解详情)。 (
gN
向后搜索。)

另一方面,您可以给

:s/…/…/
标记
c
,以便它要求您确认每个替换(
:help :s_flags
了解详细信息)。


此外,您很可能利用

.
一次击键完成步骤 2 和 3(
:help .
了解详细信息)。在您的具体示例中,您将第一次执行此操作,

/

points\.length - 1
输入cf1
target_idx
退出

然后通过 n 继续进入下一场比赛并通过 ..

应用更改

我上面提到的带有

:s
标志的
c
解决方案更快,因为您只需按 y/n 而不是 n/n..


2
投票

你已经成功一半了:

:%s/points.length - 1/target_idx/g

您所需要的只是

/c
标志:

:%s/points.length - 1/target_idx/gc

它告诉 Vim 对每次替换请求确认。

参见

:help :s_flags


但是您可能想研究 CoC 和您使用的特定语言服务器。也许他们提供了更高级别的重构命令。

© www.soinside.com 2019 - 2024. All rights reserved.