Acho que isso é o que você quer: verifique se há uma linha vazia no final do arquivo e junte todos os parágrafos (terminados por uma linha vazia).
G:a
.
:g/^./ .,/^$/-1 join
Explicação: primeiro, vá até o final do arquivo e anexe uma linha extra vazia com :a
(talvez haja uma maneira mais elegante de fazer isso; interativamente, você pode substituir as três primeiras linhas por o<ESC>
). Então, para cada linha não vazia que ainda não foi considerada ( :g/^./
), aplique o comando join
ao intervalo começando na linha selecionada ( .
) e terminando uma linha antes da próxima linha vazia ( /^$/-1
).
Opcionalmente, :g/^$/d
se você não quiser que nenhuma linha em branco permaneça (então você pode retirar o -1
).