我在 .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 声明如下所示:
extern fi_status_t ACLINFRA_CORE_OK;
替换:
^\(\w.*?\) *=.*
由:
extern \1;
说明:匹配
^
以 (\w
) 开头的行,后跟除换行符 ( ) 以外的任意数量的字符.*?
,直到第一次出现零个或多个空格 ( *
) 后跟等号和除换行符以外的更多字符 (=.*
) . 行中直到和不包括后跟等号的可选空格的部分放置在替换文本可以用作的组中\1
。如果您有跨越多行的初始化程序,您可能希望删除以一些空格开头的行,
M-x flush-lines
在 regex 上^\s-
。