私の.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-
。