One-liner:
:setfiletype sh|%s/{/{^M/g|%s/}/^M}/g|%s/;/;^M/g|normal ggVG=
Divisão:
defina o tipo de arquivo para que o vim saiba qual a sintaxe usada (script de shell, neste caso):
:setfiletype sh
insere novas linhas depois de caracteres '{' e antes '}' (digite CTRL - V digite a chave para obter um caractere literal de nova linha):
:%s/{/{^M/g
:%s/}/^M}/g
insira nova linha depois de ';' personagens:
:%s/;/;^M/g
o mesmo que digitar ggVG = no modo normal:
'gg' = ir para cima, 'V' = selecionar linhas visualmente, 'G' ir para baixo, '=' = formato automático:
:normal ggVG=
Isto é muito simples e irá falhar em muitos casos, por ex. se houver um ';' em uma string literal.
Mas isso deve deixar o código mais legível.