vim:替换可变长度的字符串

vim:替换可变长度的字符串

需要编辑的文件是markdown类型,有多个部分,以字符串修饰-,如:

Section 1
---------

Another Section
---------------

我想将所有-内容都改为=。vim 中有没有好的方法来实现这一点?假设所有部分字符串都可以-\+$在 vim 中识别为 ,但长度各不相同。我搜索过,但到目前为止还没有找到一个好的解决方案。

谢谢。

答案1

首先,我觉得有义务提一下一个专门讨论 vim 问题的网站...


话虽如此,但有几种不同的方法可以实现这一点。一种方法是在替代命令中使用“评估寄存器”。看起来如下:

:%s/-\+/\=repeat('=', len(submatch(0)))

这实际上是在说:

用“=”重复替换一个或多个破折号n次,其中 n 是破折号的数量。

这是最直接/最明显的方式,但它有点笨重/冗长,这是使用评估寄存器的替代命令的典型特征。

你也可以使用全局命令来执行此操作。如下所示:

:g/^-\+$/norm Vr=

这实际上是在说:

在每一行仅包含破折号的内容上,Vr=都像我自己输入的那样进行输入。

V将直观地选择整行,并r=用“=”字符替换整个选择。

答案2

您还必须:global将替换情境化。

:g/^-\+$/s/-/=/g

相关内容