2012-05-19 4 views
5

이맥스에서 C++ 개발을 위해 자동 완성 팝업을 할 플러그인을 찾고 있습니다. 내가 시도한 것은 Cedet Semantics와 Autocompletion mode이며, 이미 몇 마디가있는 한 변수와 함수 이름을 완성하는면에서 꽤 깔끔합니다. 예를 들어, 나는이이맥스에서 자동 완성 기능을 찾고 있습니다

int main(){ 
foo bar; 
bar.get... 
} 

플러그인을 입력 시작으로 너무 오래,라는 클래스 foo는 메인 방법에서 정수 1

class foo{ 
    int getInt(){return 1}; 
}; 

를 반환하는 기능이 팝업 아무런 문제가 없다 bar.getInt()와 같은 제안. 그러나, 내가 정말로 찾고있는 것은 이클립스 에서처럼, "점"을 누르 자마자 가능한 선택이 나를 위해 생성 될 수있다. Emacs에서 가능합니까? 감사합니다

답변

2

자동 완료 & CEDET의 설정에 따라 다릅니다. 자동 완성 기능을 사용하면 몇자를 입력 한 후에 만 ​​완성을 표시 할 수 있습니다. ac-auto-start 변수의 값을 확인할 수 있습니다. 숫자 인 경우이 문자 수 뒤에 자동 완성이 호출됩니다. 또 다른 중요한 점은 ac-sources 변수에있는 것입니다. CEDET 작업의 경우 완료 소스 ac-source-semantic-raw 또는 ac-source-semantic을 사용해야합니다. 자동 완성으로 . 또는 -> 후에는 의미의 사용하려고 할 수 있습니다 내장 완료 같은 뭔가 :

(defun my-c-mode-cedet-hook() 
(local-set-key "." 'semantic-complete-self-insert) 
(local-set-key ">" 'semantic-complete-self-insert)) 
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook) 

P.S. 당신은 my article on CEDET & C++을 보았습니까?

+1

어이 Alex! 실제로 나는 당신의 기사를 보았고 당신이 한 일을 모방하려했지만 제대로 구성 할 수 없었습니다. 음, 몇 가지 질문이 있습니다. *** 점 *** 삽입과 관련하여 위에 제안한 내용을 수행했지만 ** bar ** 이후에 위와 같은 *** 점 **을 입력 할 때마다 , 나는이 메시지를 가지고있다. *** Symbol의 함수 정의는 무효이다 : eieio-build-class-alist *** 또한 일반적인 도트 부호를 전혀 삽입 할 수 없다. 또한 *** ac-source ***, 자동 완료 패킷을 사용하고 있는데, ac-source처럼 보입니다. 그들 사이의 관계가 무엇인지, 나는 혼란 스럽다. 고맙습니다. –

+0

btw, 나는 ac-auto-start ** 변수를 4로 설정했지만 Emacs를 시작할 때마다 CH 변수를 입력하여 수동으로 변수 값을 확인해야했습니다. ** ac-auto - 시작 *** 먼저, *** *** 삽입 *** 이후 삽입, 그렇지 않으면 나는 *** 정의를 얻는 계속 void *** 오류입니다. 그런데 *** 도트 ***에는 시스템 헤더를 찾는 데 어려움이있는 것처럼 보입니다. Vector 오브젝트 다음에 점을 입력하는 것처럼 원하는대로 크기() 함수가 표시되지 않습니다. 고마워요 –

+0

흠, 그 이상한 - eieio가 제대로로드되지 않은 것 같습니다. 어떤 시맨틱 버전을 사용하고 있습니까? –

0

나는 cedet이 정말로 압도적 인 것으로 나타났습니다. 특히 cmake 프로젝트에서 그렇습니다.

https://github.com/Andersbakken/rtags 스마트 완성 기능을 사용할 때와 마찬가지로 입력 할 때 오류에 밑줄이 표시됩니다. 필요한 이맥스 패키지를 구한 후 init 파일에 이것을 추가하십시오.

(require 'rtags) 
(require 'popup) 
(require 'rtags-ac) 
(setq rtags-completions-enabled t) 
(rtags-enable-standard-keybindings c-mode-base-map) 
(add-hook 'c++-mode-hook 
      (lambda() 
      (setq ac-sources '(ac-source-rtags) 
))) 
관련 문제