Program Tip

emacs에게 C ++ 모드에서 .h 파일을 열도록 지시하는 방법은 무엇입니까?

programtip 2020. 11. 26. 19:44
반응형

emacs에게 C ++ 모드에서 .h 파일을 열도록 지시하는 방법은 무엇입니까?


C ++ 모드에서 .h 파일을 열려면 _emacs (Windows) 파일에 어떤 줄을 추가해야합니까? 기본값은 C 모드입니다.


이 시도:

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

.h 파일을 열 때마다 C ++ 모드가 사용됩니다.


c 모드와 c ++ 모드를 적절하게 사용하는 또 다른 방법은 모드 를 설정 하기 위해 디렉토리 로컬 변수 를 사용하는 것입니다.

디렉토리 변수는 모드가 1 로 설정된 후에 평가 되므로 실제로 .dir-locals.el다음을 포함하는 C ++ 프로젝트 용 파일을 작성할 수 있습니다 .

((c-mode . ((mode . c++))))

그리고 Emacs c++-mode는 처음에로 설정했을 때마다 모드를로 변경합니다 c-mode.

C 및 C ++ 프로젝트를 혼합하여 작업하는 경우 프로젝트별로 매우 사소한 솔루션이됩니다.

물론 대부분의 프로젝트가 C ++ 인 경우 c ++-mode를 기본값 2 로 설정 한 다음이 접근 방식을 반대로 사용하여 적절한 경우 c- 모드로 전환 할 수 있습니다.


1 normal-mode 통화 (set-auto-mode)(hack-local-variables)그 순서. 참고 항목 : 주 모드 후크에서 디렉터리 로컬 변수에 액세스하려면 어떻게해야합니까?

2 이렇게하려면

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

당신에게 .emacs파일 열기 이는 .h기본적으로 C ++ 모드에서 파일.


모든 .h 파일에이를 적용하지 않으려면 C ++ 헤더 파일의 맨 아래에 다음을 추가 할 수 있습니다.

// Local Variables:
// mode: c++
// End:

이것은 파일 단위로 설정하려는 Emacs 변수에 대해 작동합니다. Emacs는 선행 문자를 무시하므로 파일 유형에 적합한 주석 문자를 사용하십시오.


분명히 파일 맨 위에 이것을 넣을 수도 있습니다.

// -*-c++-*-

Emacs에게 그것이 C ++ 파일임을 알리기 위해.

나는 꽤 자주 바닐라 Emacs로 끝나고 어떤 식 으로든 Emacs를 구성하지 않고도 작동하기 때문에 이것을 사용합니다.


C와 C ++를 정기적으로 사용하기 때문에 .h 파일이 C인지 C ++인지를 "추측"하기 위해이 함수를 작성했습니다.

;; function decides whether .h file is C or C++ header, sets C++ by
;; default because there's more chance of there being a .h without a
;; .cc than a .h without a .c (ie. for C++ template files)
(defun c-c++-header ()
  "sets either c-mode or c++-mode, whichever is appropriate for
header"
  (interactive)
  (let ((c-file (concat (substring (buffer-file-name) 0 -1) "c")))
    (if (file-exists-p c-file)
        (c-mode)
      (c++-mode))))
(add-to-list 'auto-mode-alist '("\\.h\\'" . c-c++-header))

그래도 작동하지 않으면 C 모드와 C ++ 모드 사이를 전환하는 키를 설정했습니다.

;; and if that doesn't work, a function to toggle between c-mode and
;; c++-mode
(defun c-c++-toggle ()
  "toggles between c-mode and c++-mode"
  (interactive)
  (cond ((string= major-mode "c-mode")
         (c++-mode))
        ((string= major-mode "c++-mode")
         (c-mode))))

완벽하지는 않습니다. 헤더가 C인지 C ++인지 결정하는 데 더 나은 휴리스틱이있을 수 있지만 저에게 적합합니다.


이 질문에 대한 답이 이미 적절하다고 봅니다. 기묘한.

당신은 이것을 원합니다 :

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

참고 URL : https://stackoverflow.com/questions/3312114/how-to-tell-emacs-to-open-h-file-in-c-mode

반응형