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