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

我应该添加什么行到我的_emacs(在Windows)文件,使其在C ++模式下打开.h文件? 默认是C模式。

尝试这个:

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

无论何时打开.h文件,都将使用C ++模式。

另一种同时使用c模式和c ++模式的方法是使用目录局部variables来设置模式。

目录variables在模式设置为1之后被评估,所以你可以为你的C ++项目编写一个.dir-locals.el文件,其中包含:

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

Emacs将会在最初将c-mode设置为c-mode c++-mode时将模式更改为c++-mode c-mode

如果您使用C和C ++项目混合使用,这将为每个项目提供一个相当简单的解决scheme。

当然,如果大多数项目都是C ++,那么可以将c ++模式设置为默认值2 ,然后在相反的情况下使用这种方法切换到c模式。


1个 normal-mode调用(set-auto-mode)(hack-local-variables) 。 另请参阅: 如何在主要模式钩子中访问目录本地variables?

2为此,请添加

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

到您的.emacs文件,它默认以C ++模式打开.h文件。

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

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

这将适用于任何想要在每个文件基础上设置的Emacsvariables。 Emacs忽略前导字符,所以使用任何适合文件types的注释字符。

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

 // -*-c++-*- 

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

我使用这个,因为我经常以Emacs结尾,而且它没有以任何方式configurationEmacs。

由于我经常使用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))