답변:
이맥스의 모든 종류의 버퍼에서 작동하는 기본 방법은 (일명 + )에 의해 사용되는 동적 약어입니다.M-/
alt/
텍스트를 확장하여 현재 버퍼 또는 현재 열려있는 다른 버퍼에 이미 존재하는 다른 문자열을 복제합니다.
C ++ 또는 Java (또는 기타)에 고유 한 언어 인보다 광범위한 코드 완성을 위해 코드 템플릿 또는 스 니펫 패키지를보고 싶을 것입니다. 이 관련 질문 에서 StackOverflow에 대해 논의했습니다 . 이 토론에서 일반적으로 언급되는 것은 yasnippet 입니다. 이 게시물에는 emacs 블로그 의 스크린 캐스트 데모가 있습니다.
@Doug의 답변은 약간 오래되었으며 미리 정의 된 스 니펫을 사용하여 코드 확장에 중점을 둡니다.
OP의 질문은 지능 (예 : 클래스의 자동 완성 메서드 이름)에 관한 것입니다.
히피 확장 은 인기가 많았 으며 구문 분석기는 emacs 태그 입니다. 따라서 ctags 지원하는 모든 언어 (C ++, Java 포함)를 지원합니다. 그러나 ctags는 정규식 만 사용하여 코드를 분석하기 때문에 결과가 완벽하지 않습니다. 자세한 내용은 init-hippie-expand.el 을 참조하십시오. 당신은의 가치를 확인하여 시작할 수 있습니다hippie-expand-try-functions-list
자동 완성 기능 은 멋진 UI를 갖춘 최신 기능입니다 (콘솔 창에서도 드롭 다운 메뉴). clang 을 백엔드로 사용하는 경우 지능이 훨씬 좋습니다. clang이 작동하게하려면 auto-complete의 플러그인 인 auto-complete-clang을 설치해야합니다. clang 지원 언어 (C / C ++ / Obj-C) 만 지원합니다. 으로 실뱅 베너는 지적, 당신은 사용할 수 있습니다 이맥스 - eclim을 실제로 일식의 실행 파일을 호출하는 자바 파싱 백 엔드로. 따라서 자동 완성 기능은 java를 지원할 수 있습니다. 자세한 내용은 init-auto-complete.el 을 참조하십시오.
semantic 은 UI와 백엔드 구문 분석 엔진을 모두 제공합니다. 느리다. 드롭 다운 UI는 정상이지만 X 창이 필요합니다. 지능적인 결과는 ctags보다 낫습니다. 그리고 그 문서는 나에게 너무 괴짜입니다. 자세한 내용은 init-semantic.el 을 참조하십시오.
회사 모드 는 자동 완성과 유사하지만 차이점은 모든 것을 하나의 번들로 패키지한다는 것입니다. 예를 들어 C ++ 개발자는 회사 모드 만 설치하면됩니다 (자동 완성에는 일부 타사 플러그인이 필요함). 또 다른 UI 차이는 회사가 후보를 자동으로 표시한다는 것 입니다. 따라서 회사에서 더 적은 키를 누릅니다. 사용자 정의 후 자동 완성에서 동일한 작업을 수행 할 수 있습니다.
요약하면, 자동 완성, 회사가 가장 인기있는 두 가지 선택입니다. 시맨틱 및 히피 확장도 환영하지만 덜 사용됩니다. 다른 사람들은 언급하기에 너무 사소하고 그들의 기능은 이미 큰 4 가지로 덮여 있습니다. 예를 들어 자동 완성은 yasnippet을 입력 소스로 사용할 수 있습니다 (자동 완성은 UI를 제공하지만 실제 후보는 yasnippet 백엔드에 의해 생성됨).
자동 완성 또는 회사를 주요 코드 완성 플러그인으로 사용 하고 의미 적 또는 히피 확장을 보완 플러그인으로 사용 하는 것이 좋습니다 .
회사 모드와 히피 확장을 사용 하기 때문에
이제 (2017 년) 회사 모드는 자동 완성보다 적극적으로 유지되며 더 많은 타사 플러그인 (예 : 라텍스 플러그인)이 있습니다.
히피 확장은 매우 활성화되지 않았지만 TAB
회사 모드 / 시맨틱 / 자동 완성이 사용하는 키를 차지하지 않습니다.
C ++ / Java에 회사 모드를 사용하는 경우을 수정하려고 할 수 company-backends
있습니다.
회사 모드에 대한 몇 가지 추가 정보
의 값을 조정해야 할 수도 있습니다 company-backends
. 예를 들어, 값이이라고 가정하십시오 (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
. 그런 다음 company-eclim
0이 아닌 후보자를 얻을 수 있다면 company
java를 작성한다고 생각하므로 이후에 백엔드가 실행되지 않습니다 company-eclim
.
이제 보자 (company-dabbrev-code company-gtags company-etags company-keywords)
. 이 네 개의 백엔드는 모두 함께 사용됩니다. 예를 들어, company-dabbrev-code
0이 아닌 후보를 성공적으로 가져온 후에도 나머지 3 개의 백엔드는 여전히 실행됩니다.
실제로는 백엔드 순서를 다시 조정하거나 새 백엔드를 추가해야하는 경우가 종종 있습니다 ( company-rtags
예 :) .
짧은 답변: M-/
긴 대답 : RTFM :-)
C-h r
)
C-h k M-/
?
complete.el
를 사용해 볼 수도 있습니다 . 그것은 오래되고 거의 알려지지 않았지만, 제공하는 버퍼 내 완성의 종류가 유용 할 수 있습니다.M-x find-library complete
파일에서 해설을 읽으십시오.