Fazendo declarações externas fora das declarações globais em C usando query-replace-regexp do emacs

2

Eu tenho muitas das seguintes declarações globais em um arquivo .c:

fi_status_t ACLINFRA_CORE_OK = { { e_FI_STAT_MODULE_ACLINFRA, e_FI_STAT_ACLINFRA_SUBMOD_CORE, e_FI_STATUS_OK }, NULL };
fi_status_t ACLINFRA_CORE_ERR_GDFW_REG_FAILED = { { e_FI_STAT_MODULE_ACLINFRA, e_FI_STAT_ACLINFRA_SUBMOD_CORE, e_CORE_ERR_GDFW_REG_FAILED }, NULL };
fi_status_t ACLINFRA_CORE_ERR_DHAS_REG_FAILED = { { e_FI_STAT_MODULE_ACLINFRA, e_FI_STAT_ACLINFRA_SUBMOD_CORE, e_CORE_ERR_DHAS_REG_FAILED }, NULL };
fi_status_t ACLINFRA_CORE_ERR_GDFW_REQ_FAILED = { { e_FI_STAT_MODULE_ACLINFRA, e_FI_STAT_ACLINFRA_SUBMOD_CORE, e_CORE_ERR_GDFW_REQ_FAILED }, NULL };

Agora, eu os copiei e colei em um arquivo .h . Mas como eu uso o emacs para convertê-los facilmente nas declarações extern equivalentes usando query-replace-regexp ?

A declaração externa seria parecida com a seguinte:

extern fi_status_t ACLINFRA_CORE_OK;
    
por codeblazer 22.07.2018 / 21:29

1 resposta

1

Substituir: ^\(\w.*?\) *=.*
por: extern ;

Explicação: início das linhas de correspondência ( ^ ) com um constituinte de palavra ( \w ) seguido por qualquer número de caracteres que não seja nova linha ( .*? ) até a primeira ocorrência de zero ou mais espaços ( ​ * ) seguido por um sinal de igual e mais caracteres além de uma nova linha ( =.* ). A parte da linha até e excluindo os espaços opcionais seguidos pelo sinal de igual é colocada em um grupo que o texto de substituição pode usar como .

Se você tiver inicializadores que abranjam várias linhas, talvez queira remover linhas que começam com algum espaço em branco, com M-x flush-lines na regex ^\s- .

    
por 22.07.2018 / 22:30