加入 VIM 中某一组的所有比赛

加入 VIM 中某一组的所有比赛

我正在尝试编写一个替换命令,该命令将搜索包含至少 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

相关内容