내 .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
그 뒤에 줄 바꿈( )을 제외한 모든 문자가 .*?
0개 이상의 공백( )이 처음 나타날 때까지 *
그 뒤에 등호 및 줄 바꿈을 제외한 등호( )가 오는 행과 일치합니다. ) =.*
). 행의 부분(등호 뒤에 오는 선택적 공백 제외)은 대체 텍스트를 로 사용할 수 있는 그룹에 배치됩니다 \1
.
M-x flush-lines
초기화 프로그램이 여러 줄에 걸쳐 있는 경우 정규식에서 공백으로 시작하는 줄을 제거해야 할 수도 있습니다 ^\s-
.