Как сказать emacs открывать.h файл в режиме C++?

Какие строки я должен добавить к своему _emacs (в Windows), файл, чтобы иметь его открывает.h файлы в режиме C++? Значение по умолчанию является режимом C.

62
задан Alexey Shmalko 19 January 2017 в 16:30
поделиться

4 ответа

Попробуйте следующее:

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

Каждый раз, когда вы открываете файлы .h, будет использоваться C ++ - режим.

66
ответ дан 24 November 2019 в 16:37
поделиться

Если вы не хотите, чтобы это применялось к каждому файлу .h, вы можете добавить следующее в конец ваших файлов заголовков C ++.

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

Это будет работать для любых переменных Emacs, которые вы хотите установить для каждого файла. Emacs игнорирует начальные символы, поэтому используйте любые символы комментариев, подходящие для данного типа файла.

21
ответ дан 24 November 2019 в 16:37
поделиться

Могу поклясться, что уже видел правильный ответ на этот вопрос? Странный.

Вы хотите это:

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
3
ответ дан 24 November 2019 в 16:37
поделиться

Поскольку я регулярно использую и 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 ++, но для меня это работает.

17
ответ дан 24 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: