我正在尝试编写一个替换命令,该命令将搜索包含至少 4 个由空格分隔的字母的文本并删除空格:
%s/\v%(([a-zA-Z])\s){3,}([a-zA-Z])/\1\2/gc
但
L i g ht
变成
ght
正如预期的那样,因为一个组仅包含g
在这种情况下的最后一个匹配项。如何累积所有组的匹配\1
然后加入它们?
我正在尝试编写一个替换命令,该命令将搜索包含至少 4 个由空格分隔的字母的文本并删除空格:
%s/\v%(([a-zA-Z])\s){3,}([a-zA-Z])/\1\2/gc
但
L i g ht
变成
ght
正如预期的那样,因为一个组仅包含g
在这种情况下的最后一个匹配项。如何累积所有组的匹配\1
然后加入它们?
给定一个像
(...){n,m}
or这样的重复组(...)+
,我认为 Vim 没有办法提取该组的每次出现。只有最后一个在所有与正则表达式相关的函数和命令中可用。也就是说,您可以使用嵌套替换:
\=
替换中的A:s
使 Vim 将替换作为表达式计算。在该表达式中,我使用该函数删除(由 获得)substitute()
的整个匹配文本中的所有空格,从.:s
submatch(0)
Ligh
L i g h