经常,如果我有一个像
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
。
是否存在到达搜索文本末尾的文本动作?
这样我就可以走了
n
c<special text motion here>
target_idx
我正在使用安装了 CoC 的 neovim,因此我对插件或语言服务器替换的更深入想法持开放态度,但这感觉应该是一个我不知道的简单文本动作。
我想你可以去
gn
(:help gn
了解详情)。 (gN
向后搜索。)
另一方面,您可以给
:s/…/…/
标记c
,以便它要求您确认每个替换(:help :s_flags
了解详细信息)。
此外,您很可能利用
.
一次击键完成步骤 2 和 3(:help .
了解详细信息)。在您的具体示例中,您将第一次执行此操作,
/
points\.length - 1
输入cf1target_idx
退出
然后通过 n 继续进入下一场比赛并通过 ..
应用更改我上面提到的带有
:s
标志的 c
解决方案更快,因为您只需按 y/n 而不是 n/n..
你已经成功一半了:
:%s/points.length - 1/target_idx/g
您所需要的只是
/c
标志:
:%s/points.length - 1/target_idx/gc
它告诉 Vim 对每次替换请求确认。
参见
:help :s_flags
。
但是您可能想研究 CoC 和您使用的特定语言服务器。也许他们提供了更高级别的重构命令。