Vim 转到下一个搜索结果并在视觉上 select

Vim go to next search result and visually select it

如果我有一个像 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 - 11points+length - 1。 (我也知道非常神奇的搜索,但我对它 does/doesn 不考虑特殊字符的所有微妙之处也不是很有信心)

所以我想要的是能够通过 /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,所以我愿意接受更深入的插件或语言服务器替换的想法,但这感觉应该是一个我不知道的简单文本动作。

我猜你可以选择 gn:help gn 了解详情)。 (gN 向后搜索。)

另一方面,您可以给 :s/…/…/ 标志 c,这样它会要求您确认每个替换(:help :s_flags 了解详情)。


此外,您很可能会利用 . 一次击键完成第 2 步和第 3 步(:help . 了解详情)。在你的具体例子中,你会第一次这样做,

/points\.length - 1输入cf1target_idx转义

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

应用更改

我上面提到的带有 c 标志的 :s 解决方案更快(您只需按 y/n 而不是 n/n..

您已完成一半:

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

你只需要/c标志:

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

告诉Vim每次替换都要求确认。

:help :s_flags


但您可能想查看 CoC 和您使用的特定语言服务器。也许他们提供 higher-level 重构命令。