簡體   English   中英

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

[英]How to tell emacs to open .h file in C++ mode?

我應該在_emacs(在Windows上)文件中添加哪些行,以便在C ++模式下打開.h文件? 默認為C模式。

試試這個:

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

每當你打開.h文件時,都會使用C ++模式。

另一種同時使用c-mode和c ++模式的方法是使用目錄局部變量來設置模式。

在模式設置1之后評估目錄變量,因此您實際上可以為包含以下內容的C ++項目編寫.dir-locals.el文件:

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

只要最初將c-mode設置為c-mode ,Emacs就會將模式更改為c++-mode c-mode

如果您使用混合的C和C ++項目,這將為每個項目提供一個非常簡單的解決方案。

當然,如果你的大部分項目都是C ++,你可以將c ++ - mode設置為默認值2 ,然后你可以反過來使用這種方法在適當的時候切換到c-mode。


按順序進行1次 normal-mode調用(set-auto-mode)(hack-local-variables) 另請參閱: 如何在主模式掛鈎中訪問目錄本地變量?

2為此,請添加

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

到您的.emacs文件,默認情況下以C ++模式打開.h文件。

如果您不希望將其應用於每個.h文件,則可以將以下內容添加到C ++頭文件的底部。

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

這適用於您要基於每個文件設置的任何Emacs變量。 Emacs忽略前導字符,因此請使用適合文件類型的任何注釋字符。

顯然你也可以把它放在文件的頂部:

// -*-c++-*-

告訴Emacs它是一個C ++文件。

我使用它,因為我經常最終使用香草Emacs並且無需以任何方式配置Emacs。

由於我經常使用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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM