Estou tentando escrever um comando de substituição que procure um texto contendo pelo menos 4 letras separadas por espaços e remova os espaços:
%s/\v%(([a-zA-Z])\s){3,}([a-zA-Z])/\1\2/gc
Mas
L i g ht
torna-se
ght
como esperado porque um grupo contém apenas a última correspondência que estava g
nesse caso. Como acumular todas as partidas do grupo \1
e depois entrar neles?
Dado um grupo repetido como
(...){n,m}
ou(...)+
, não acho que haja alguma maneira de o Vim extrair cada ocorrência do grupo. Somente o último é disponibilizado em todas as funções e comandos relacionados ao regex.Dito isso, você pode usar uma substituição aninhada:
A
\=
na substituição de:s
faz com que o Vim avalie a substituição como uma expressão. E nessa expressão, estou usando asubstitute()
função para remover todos os espaços em todo o texto correspondente de:s
(obtido porsubmatch(0)
), dandoLigh
deL i g h
.