我应该在_emacs(在Windows上)文件中添加哪些行,让它在C ++模式下打开.h文件?默认为C模式。
答案 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)