使用 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-

相关内容