Tenho brincado com alguma magia macro em C ultimamente, então acabei criando uma macro multilinha muito longa onde tive que colocar o caractere ” no final de cada linha. Muito chato, pois o código era difícil de ler. Seria muito melhor se a barra invertida fosse colocada em uma coluna fixa em cada linha, digamos, na linha 80 (escolha o número que mais lhe convier).
Aqui está um exemplo bobo de uma macro multilinhas:
#define AWESOME_MACRO(class_name, stored_type)
struct class_name
{
stored_type* data;
};
Eu queria fazer a macro ficar assim:
#define AWESOME_MACRO(class_name, stored_type)
struct class_name
{
stored_type* data;
};
Muito, muito mais legível, especialmente se a macro tiver mais de 200 linhas. Existem 2 maneiras, pelo menos, de fazer isso facilmente, com tecnologia vim e awk. Se você trabalha com o vim, entre no modo de linha visual (V) e selecione as linhas que deseja modificar. Pressione dois pontos e emita o seguinte comando:
s/s*\$/=repeat(' ', 80-col('.')).''
Se você não usa o vim, o awk é seu amigo. Abra o terminal e digite:
awk 'sub(/\$/,"") { $0 = sprintf("%-79s\",$0) } 1' file
Para aplicar as alterações no arquivo usando awk:
awk 'sub(/\$/,"") { $0 = sprintf("%-79s\",$0) } 1' file > file.tmp && mv file.tmp file