emacsのquery-replace-regexpを使用してCのグローバル宣言からextern宣言を生成する

emacsのquery-replace-regexpを使用してCのグローバル宣言からextern宣言を生成する

私の.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 };

今、それらを抜いて.hファイルに貼り付けました。しかし、emacsを使ってそれを同等のextern宣言に簡単に変換する方法は何ですかquery-replace-regexp

外部宣言は次のとおりです。

extern fi_status_t ACLINFRA_CORE_OK;

答え1

に置き換えられる^\(\w.*?\) *=.*
extern \1;

説明:^単語コンポーネント()で始まり、\wその後に改行()を除くすべての文字は、.*?ゼロ個以上のスペース()が最初に表示されるまで、後に​ *等号と改行を除く等号()が続く行と一致します。 )=.*))。行の部分(等号の後にあるオプションのスペースを除く)は、代替テキストをとして使用できるグループに配置されます\1

M-x flush-lines初期化プログラムが複数行にまたがる場合は、正規表現からスペースで始まる行を削除する必要があるかもしれません^\s-

関連情報