Insira “return 0” entre todas as chaves em um arquivo?

2

Estou configurando uma biblioteca de teste razoavelmente grande (~ 50 funções) em C ++. Esqueci que as funções devem retornar inteiros. Eu realmente esqueci de colocar um tipo de retorno, o quão burro é isso? Eu adicionei o tipo de retorno int no início de cada função com:

:%s/^[a-z]/int &/g

mas agora não consigo descobrir como adicionar return 0; a cada um deles. Eu tentei:

:%s/{\r\r}/{\r\treturn 0;\r}/g

e variações dele, e cada um disse que não conseguia encontrar o padrão. As funções são configuradas como:

int function_name()
{

}

e eu quero que eles se pareçam com:

int function_name()
{
    return 0;
}

alguma ideia ???

    
por adam-watson 29.05.2015 / 22:17

2 respostas

1

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).

    
por 29.05.2015 / 22:42
1

Você pode usar

:%s/^}/    return 0;\r}/g

Você realmente não precisa se preocupar com as chaves de abertura, é o suficiente para encontrar as chaves de fechamento com 0 indentação.

    
por 30.05.2015 / 00:01