我有一个正则表达式用某个字符串替换某个模式,但我想让它更具动态性.
例如,假设我有这个正则表达式:
%s/hello/-----/g
但是,我会喜欢这样做:
%s/hello/-{5}/g
这意味着用5个破折号替换你好.
有没有办法做到这一点?
最后,我想做这样的事情:
%s/(hello)*/-{\=strlen(\0)}/g
它将hello用短划线替换只有s 的字符串的任何实例,其长度等于匹配字符串的长度.
Pet*_*ker 24
%s/\v(hello)*/\=repeat('-',strlen(submatch(0)))/g
Run Code Online (Sandbox Code Playgroud)
可以自动执行编辑命令以执行替换,而不是使用替换命令.用手特别重写具有特定字符的搜索模式的最简单方法如下.
搜索下一次出现的开始.
/\(hello\)\+
Run Code Online (Sandbox Code Playgroud)选择匹配的文本直到结束.
v//e
Run Code Online (Sandbox Code Playgroud)替换所选文本.
r-
Run Code Online (Sandbox Code Playgroud)从步骤1开始重复.
因此,要自动执行此例程,请运行该命令
:let[@/,@s]=['\(hello\)\+',"//\rv//e\rr-@s"]
Run Code Online (Sandbox Code Playgroud)
并s从缓冲区的开头(或从其他适当的位置)开始执行该寄存器的内容:
gg@s
Run Code Online (Sandbox Code Playgroud)