Emacs는 자동 완성 기능이없는 다른 IDE와 경쟁 할 수 없습니다. 자동 완성 기능을 사용하면보다 효율적인 프로그래머가됩니다. 자동 완성 모드 확장을 알고 있지만 C ++에서는 작동하지 않습니다.
C ++를위한 스마트하고 효율적인 자동 완성을 어떻게 달성 할 수 있습니까?
이 질문은 원래 Malabarba 에 의해 Area 51 제안 : C ++에서 지능적인 자동 완성을 얻는 방법?
Emacs는 자동 완성 기능이없는 다른 IDE와 경쟁 할 수 없습니다. 자동 완성 기능을 사용하면보다 효율적인 프로그래머가됩니다. 자동 완성 모드 확장을 알고 있지만 C ++에서는 작동하지 않습니다.
C ++를위한 스마트하고 효율적인 자동 완성을 어떻게 달성 할 수 있습니까?
이 질문은 원래 Malabarba 에 의해 Area 51 제안 : C ++에서 지능적인 자동 완성을 얻는 방법?
답변:
면책 조항 : 나는 아이러니 모드의 저자입니다
스마트 자동 완성을 원한다면 company-irony 와 함께 irony-mode 를 권할 수 있습니다 .
아직 인용되지 않은 또 다른 도구는 emacs-ycmd 입니다.
irony-mode
clang_codeCompleteAt
구문 분석 된 TU (그러나 저장되지 않은 변경 사항)로 호출하는 데 3-5 초가 걸리는 것으로 나타났습니다 . 가 irony-mode
이보다 빨리?
내 가이드를 확인하십시오 . C / C ++에서 자동 완성을위한 몇 가지 방법이 나열되어 있습니다.
이러한 옵션은 다음과 같습니다.
아이러니 사용 . Clang을 사용하고 다른 솔루션과 비교하여 설정하기 쉽기 때문에 적극 권장됩니다.
Emacs의 내장 파서를 사용합니다. Semantic Emacs 파서에서 얻을 수있는 가장 좋은 자동 완성이지만 Linux 커널과 같은 대규모 프로젝트에서는 느릴 것입니다.
사용 company-mode
하여 패키지를 company-clang
. Clang에서 경로를 자동으로 가져올 수 있지만 로컬 프로젝트에 대한 일부 구성을 수행해야하므로 시스템 포함 경로에 대한 코드 완성을 제공합니다.
company-mode
와 함께 사용 company-gtags
. GNU Global에서 생성 된 태그 데이터베이스를 완성으로 사용합니다. 이를 사용하여 프로젝트에 로컬로 완전한 코드를 제공 할 수 있습니다. 생성 된 데이터베이스 내부의 모든 것을 사용자에게 던지기 때문에 정확하게 지능적이지는 않습니다.
rtags
실시간 분석을위한 서버를 제공하여 더 멀리 나아갑니다. 그러나 순수한 Elisp 솔루션과 비교하여 설정이 복잡합니다.
RTags + Company에서 큰 성공을 거두었습니다 .
RTag는 rdm
코드 완성, 코드 탐색 및 리팩토링을 위해 clang을 사용 하는 별도의 데몬을 실행해야합니다. rdm
또한 기호 데이터베이스로 기능하므로 자동 완성이 직접 호출하는 솔루션보다 훨씬 빠릅니다 clang_codeCompleteAt
.
RDM는 번거 로움을 할 수 있습니다 귀하의 프로젝트를 컴파일 플래그의 정보를 필요로하지만 당신이에서 조언을 따르는 경우 RTags의 페이지와 심볼릭 링크 gcc-rtags-wrapper.sh
로 gcc
, g++
, cc
및 c++
RDM가 자동으로 재 컴파일에 새 컴파일 플래그와 함께 업데이트됩니다.
해결 방법 1 : 회사 모드 + 클랑
유일한 문제는 회사 모드에 프로젝트의 c / c ++ 헤더 파일을 검색 할 위치를 알려주는 것입니다.
cmake를 사용하는 경우 https://github.com/redguardtoo/cpputils-cmake 가 설정을 수행 하도록 할 수 있습니다 (힌트 : cpputils-cmake의 저자입니다).
또는
해결 방법 2 : 회사 모드 + GNU 글로벌
말할 것도없이, gnu global cli 툴을 사용하여 태그를 빌드 할 필요가 있습니다.
저는 cmake-ide 를 사용하여 rtags, flycheck, irony 및 company-clang을 구성했습니다.
이제 빌드 시스템 과 자주 사용하는 정적 분석 emacs 플러그인을 동시에 구성 할 수 있습니다 !
편집 : 회사 clang은 당신이 찾고있는 기능인 자동 완성 기능을 제공합니다. cmake-ide는 또한 flycheck 및 rtag를 구성 할 수 있으며, 이는 IDE와 유사한 기능을 추가합니다.
MX 시맨틱 모드
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
태그 테이블
검색 . -name "*. [chCH]"-print | etags-
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags-이맥스에 대한 태그 파일 생성, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=ko
지점에서 CMi (또는 M-TAB) 완료. 시맨틱 모드가 활성화 된 경우 시맨틱 파서 데이터를 사용하려고합니다. 시맨틱 모드가 비활성화되었거나 실패한 경우 선택한 태그 테이블을 사용하여 완료를 시도합니다 (태그 참조).
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
엠-. (찾기 태그)가 태그 이름을 묻고 정의로 이동합니다.
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e