如何告诉emacs在C ++模式下打开.h文件?

时间:2010-07-22 18:27:52

标签: emacs

我应该在_emacs(在Windows上)文件中添加哪些行,让它在C ++模式下打开.h文件?默认为C模式。

6 个答案:

答案 0 :(得分:65)

试试这个:

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

每当你打开.h文件时,都会使用C ++模式。

答案 1 :(得分:33)

另一种同时使用c-mode和c ++模式的方法是使用directory local variables来设置模式。

在模式设置为 1 之后评估目录变量,因此您实际上可以为包含以下内容的C ++项目编写.dir-locals.el文件:

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

只要最初将模式设置为c++-mode,Emacs就会将模式更改为c-mode

如果您使用混合的C和C ++项目,这将为每个项目提供一个非常简单的解决方案。

当然,如果你的大部分项目都是C ++,你可以将c ++ - mode设置为默认的 2 ,然后你可以反过来使用这种方法在适当时切换到c-mode


1 normal-mode按此顺序调用(set-auto-mode)(hack-local-variables)。另见:How can I access directory-local variables in my major mode hooks?

2 为此,请添加

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

到默认情况下以C ++模式打开.emacs文件的.h文件。

答案 2 :(得分:21)

如果您不希望将其应用于每个.h文件,则可以将以下内容添加到C ++头文件的底部。

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

这适用于您要基于每个文件设置的任何Emacs变量。 Emacs忽略前导字符,因此请使用适合文件类型的任何注释字符。

答案 3 :(得分:19)

显然你也可以把它放在文件的顶部:

// -*-c++-*-

告诉Emacs它是一个C ++文件。

我使用它,因为我经常最终使用香草Emacs而且无需以任何方式配置Emacs。

答案 4 :(得分:17)

由于我经常使用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 ++但它对我有用。

答案 5 :(得分:3)