vim
tem essa idiossincrasia porque você precisa usar \n
para corresponder a um caractere de nova linha em um regexp, mas \r
( \r
sendo CR, não nova linha) para inseri-lo no lado direito do comando s/LHS/RHS/
(em que \n
insere um NUL).
Eu nunca entendi o porquê. Mesmo considerando que a tecla Enter envia um caractere \r
que vim
tem que converter para NL (como a disciplina de linha tty quando o terminal está no modo canônico) não explica tudo. Você também notará que quando você inserir o caractere \n
(pressionando Ctrl + J ), vim
insere um caractere NUL.
:h NL-used-for-Nul
nos diz que é porque vim
armazena NULs internamente como NLs (suponho que ainda possa usar strings delimitadas por NUL), mas isso não explica por que decidiu tornar isso visível para o usuário em a interface.
De qualquer forma, é assim que temos que nos contentar com isso, então aqui:
:%s/{\n\n}/{\r\treturn 0;\r}/g
(estamos combinando caracteres de nova linha, substituindo-os por caracteres CR convertidos em caracteres de nova linha).