我的 .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-
。