emacs에서 코드 완성을 얻는 방법?


20

emacs가 코드 완성을 지원한다는 것을 알고 있습니다. 그러나 솔직히 말해서 나는 적어도 완전히 새로운 것에 대해 좋은 FAQ 리더가 된 적이 없었습니다. 그래서 내가 다운로드 해야하는 것과 emacs가 C ++ 및 Java에서 스마트 코드 완성을 할 수 있도록 만드는 방법이 궁금합니다. 아니면 많은 주요 언어에 대해 코드 완성을 수행하는 패키지가 있습니까?

답변:


27

이맥스의 모든 종류의 버퍼에서 작동하는 기본 방법은 (일명 + )에 의해 사용되는 동적 약어입니다.M-/alt/

텍스트를 확장하여 현재 버퍼 또는 현재 열려있는 다른 버퍼에 이미 존재하는 다른 문자열을 복제합니다.

C ++ 또는 Java (또는 기타)에 고유 한 언어 인보다 광범위한 코드 완성을 위해 코드 템플릿 또는 스 니펫 패키지를보고 싶을 것입니다. 이 관련 질문 에서 StackOverflow에 대해 논의했습니다 . 이 토론에서 일반적으로 언급되는 것은 yasnippet 입니다. 이 게시물에는 emacs 블로그 의 스크린 캐스트 데모가 있습니다.


+1. 표준 라이브러리 complete.el를 사용해 볼 수도 있습니다 . 그것은 오래되고 거의 알려지지 않았지만, 제공하는 버퍼 내 완성의 종류가 유용 할 수 있습니다. M-x find-library complete파일에서 해설을 읽으십시오.
Drew

21

@Doug의 답변은 약간 오래되었으며 미리 정의 된 스 니펫을 사용하여 코드 확장에 중점을 둡니다.

OP의 질문은 지능 (예 : 클래스의 자동 완성 메서드 이름)에 관한 것입니다.

  1. 히피 확장 은 인기가 많았 으며 구문 분석기는 emacs 태그 입니다. 따라서 ctags 지원하는 모든 언어 (C ++, Java 포함)를 지원합니다. 그러나 ctags는 정규식 만 사용하여 코드를 분석하기 때문에 결과가 완벽하지 않습니다. 자세한 내용은 init-hippie-expand.el 을 참조하십시오. 당신은의 가치를 확인하여 시작할 수 있습니다hippie-expand-try-functions-list

  2. 자동 완성 기능 은 멋진 UI를 갖춘 최신 기능입니다 (콘솔 창에서도 드롭 다운 메뉴). clang 을 백엔드로 사용하는 경우 지능이 훨씬 좋습니다. clang이 작동하게하려면 auto-complete의 플러그인 인 auto-complete-clang을 설치해야합니다. clang 지원 언어 (C / C ++ / Obj-C) 만 지원합니다. 으로 실뱅 베너는 지적, 당신은 사용할 수 있습니다 이맥스 - eclim을 실제로 일식의 실행 파일을 호출하는 자바 파싱 백 엔드로. 따라서 자동 완성 기능은 java를 지원할 수 있습니다. 자세한 내용은 init-auto-complete.el 을 참조하십시오.

  3. semantic 은 UI와 백엔드 구문 분석 엔진을 모두 제공합니다. 느리다. 드롭 다운 UI는 정상이지만 X 창이 필요합니다. 지능적인 결과는 ctags보다 낫습니다. 그리고 그 문서는 나에게 너무 괴짜입니다. 자세한 내용은 init-semantic.el 을 참조하십시오.

  4. 회사 모드 는 자동 완성과 유사하지만 차이점은 모든 것을 하나의 번들로 패키지한다는 것입니다. 예를 들어 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-eclim0이 아닌 후보자를 얻을 수 있다면 companyjava를 작성한다고 생각하므로 이후에 백엔드가 실행되지 않습니다 company-eclim.

이제 보자 (company-dabbrev-code company-gtags company-etags company-keywords). 이 네 개의 백엔드는 모두 함께 사용됩니다. 예를 들어, company-dabbrev-code0이 아닌 후보를 성공적으로 가져온 후에도 나머지 3 개의 백엔드는 여전히 실행됩니다.

실제로는 백엔드 순서를 다시 조정하거나 새 백엔드를 추가해야하는 경우가 종종 있습니다 ( company-rtags예 :) .


라텍스에 대한 Emacs 24에서 가장 좋은 자동 완성 패키지는 무엇입니까?
박사

@doctorate 자동 완성 기능과 소스 emacswiki.org/emacs/AutoCompleteSources를 사용해야한다고 생각 하지만 라텍스 사용자 대신 프로그래머이므로 Google과 Emacs 커뮤니티, 많은 학계의 사람들을 두 번 확인하는 것이 좋습니다. .
chen bin

회사 모드는 라텍스도 지원합니다. 나는 회사에 대신 자동 완성 제안 그래서
첸 빈

2

짧은 대답 : Java에 유용한 emacs에 대해서는 아무것도 모른다. 동적 확장은 클래스 경로의 라이브러리를 신경 쓰지 않으며 입력하는 코드에 대해 아무것도 알지 못하므로 버퍼 중 하나에 이미 존재하는 텍스트로만 확장 할 수 있습니다. JDE와 emacs-eclim은이 기능을 제공하려고 노력했지만 개인적으로는 감동하지 않았습니다.


0

짧은 답변: M-/

긴 대답 : RTFM :-)


6
+1, 신 나는 다음 질문에 "RTFM 명령을 사용하는 데 도움이 필요하다"라는 희망을 품고 싶다
rownage

@rownage : 아, 그건``info-emacs-manual''` ( C-h r)
SamB

1
어때요 C-h k M-/?
Doug Harris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.