如何告诉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))