2012-12-30 4 views
3

.html과 같은 프로그래밍 언어가 혼합 된 파일의 경우 의미를 분석하는 데 문제가 있습니다. 특정 유형의 파일에 대해 의미에 따라 자동 분석을 사용하지 않도록 설정할 수있는 방법이 있습니까?특정 파일 형식에 대한 의미 체계를 비활성화하는 방법

CEDET Version: 1.0 
      Requested File  Loaded 
    Package  Version  Version  Version 
    ---------------------------------------------------------- 
    cedet:  1.0  nil  ok 
    eieio:  1.3  nil  ok 
    semantic:  2.0  nil  ok 
    srecode:  1.0  nil  ok 
    ede:   1.0  nil  ok 
    speedbar:  1.0  nil  ok 

답변

1

사용 semantic-inhibit-functions :

나는 내장 cedet 이맥스 (24)와 함께 오는을 사용하고 있습니다. 예를 들어, 다음 :

(setq semantic-inhibit-functions 
     (list (lambda() (not (and (featurep 'cc-defs) 
           c-buffer-is-cc-mode))))) 

모든 비 cc-mode 버퍼에 시맨틱 중지한다.

+0

'semantic-inhibit-functions '가 작동하는 것처럼 보입니다. 감사합니다 – RNA

+1

경고 경고 경고 코드를 실행하지 마십시오. 전체 semantic-inhibit-functions 목록을 덮어 씁니다! 대신 목록에 항목을 추가하는 적절한 방법을 찾아보십시오. – buggy3

2

또 다른 예를 들어, 특정 모드를 해제하려면 다음과 시맨틱 문서에서

(add-to-list 'semantic-inhibit-functions 
      (lambda() (member major-mode '(html-mode)))) 
+0

며칠 전에 일했지만, 어쨌든 이상하게 작동하지 않습니다. 나는 이미 그것을 (add-hook 'org-mode-hook'(lambda() ( (make-local-variable 'semantic-mode) nil)로 설정)로 변경했다. – CodyChan

2

을 :

2.3.1 특정 버퍼

사용 분석 억제 할 수

을 구문 분석하지 마십시오 semantic-inhibit-functions 변수.

- 변수 : semantic-inhibit-functions 과 함께 호출 할 함수의 목록으로 semantic이 버퍼를 설정합니다. 이러한 함수 중 하나가 nil이 아닌 값을 반환하면 현재 버퍼는 Semantic을 사용하도록 설정되지 않습니다.

매우 큰 파일에서이 금지 분석을 사용하거나 의미가있는 특정 문제를 일으키는 파일을 사용할 수 있습니다.

적절한 사용 예 :

;; Disable Semantic's source referencing in lisp buffers. 
    (add-hook 'semantic-inhibit-functions 
      (lambda() (member major-mode '(emacs-lisp-mode)))) 

이 (대신 목록을 덮어 쓰는) 목록에 추가하고 의미가로드 된 후에 만 ​​실행되도록합니다.

사용자 설정을 초기화 할 때 의미 패키지가로드되지 않을 수 있으므로 with-eval-after-load을 사용해야합니다. 이 경우 semantic-inhibit-functions 변수가 존재하지 않고 오버라이드가 적용되지 않는다는 오류가 발생합니다.

이 문제가 해결되어 @ Tom과 @ Dmitry의 답변보다 좋습니다.

아, Semantic은 autocompletion이 발생할 때마다 실행중인 Emacs 인스턴스의 전체 소스 코드 트리를 구문 분석하려고 시도하기 때문에 emacs-lisp-mode를 차단하는 것이 좋습니다. 패키지가 많은 경우 이맥스가 멈 춥니 다.

+2

더 잘할 수 있고'add-to-list' 대신'add-hook'을 사용하십시오. 이렇게하면 '로딩 후 평가'도 불필요하게된다. – Dmitry

+0

@Dmitry 모든 버퍼에 대해 자체를 활성화해야 하는지를 확인하기 위해 semantic이 호출하는 함수의 목록 **입니다.add-hook (list-writer 함수)을 사용하면리스트가 아직 존재하지 않는다면리스트를 생성 할 것이고, 이것은 시맨틱이 init에서리스트를 덮어 쓸 경우 장래에 깨질 수있다. 그러므로 적절한 방법은 위에서와 같이'with-eval-after-load add-to-list'를 래핑하는 것입니다. 당신은 구글 수 있습니다. ;-) – buggy3

+1

'semantic-inhibit-functions'는'hook' 타입의'defcustom'입니다. 따라서 시맨틱 자체는 미래에 그것을 덮어 쓰지 않는 것에 대해 걱정해야합니다. 또한'run-hook-with-args-until-success'로 처리됩니다. – Dmitry