2010-07-22 15 views

cevap

61

bu deneyin:

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

dosyaları .h açtığınızda, C++ - modu kullanılacaktır.

+0

Çalıştı. Çok teşekkürler. – kujawk

3

Yemin ederim Bu soruyu uygun bir şekilde cevaplandı mı gördüm? Tuhaf. bunu her .h dosyasına uygulamak istemiyorsanız

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

Yaptınız ... yazar silindi. –

19

, size C++ başlık dosyaları altına aşağıdaki ekleyebilirsiniz:

Bunu istiyorsun.

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

Bu, dosya bazında ayarlamak istediğiniz tüm Emacs değişkenleri için çalışacaktır. Emacs, önde gelen karakterleri yok sayar, bu nedenle dosya türü için uygun olan tüm yorum karakterlerini kullanın. Hem C ve C++ düzenli olarak kullandığınız yana

+0

Teşekkürler, bunu emacs ile yapabileceğinizi bilmiyordum. – kujawk

+0

Hiç dosyada çalıştığını bilmiyordum. Bu çok yararlı olabilir. Teşekkürler :) –

16

, denemek ve bir .h dosyası C olması gerekiyordu ya olup olmadığını "tahmin" için bu fonksiyonu yazdım 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)) 

Ve bu ben işe yaramazsa

bir başlık C veya C++ ama benim için çalışıp çalışmadığını C ve C arasında geçiş yapmak için bir anahtar set ++ modları

;; 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)))) 

mükemmel değil, karar vermek için daha iyi bir sezgisel olabilir.

+0

Dosyadaki modu kodlamak için daha iyi bir çözüm olabilir (cevabıma bakın) ve daha sonra uygun satırları dosyaya eklemek için anahtarları tanımlayın. Tek dezavantajı, emacs kullanmayanların da bunu görmesidir, fakat dosyanın alt kısmında bir sorun olmamalıdır. – KeithB

+1

Bu sizin kendi projeleriniz için uygun, ancak çözümüm esas olarak diğer insanların projeleriyle ilgileniyor. Yerel değişkenlerinizi üçüncü taraf bir projede başlıkları sonuna kadar kandırabilirsiniz, ancak bu çok fazla IMO denemesidir. – Borbus

+0

Aslında bu çözümü çok beğendim, herhangi bir kaynak dosyayı değiştirmeden davranışı özelleştirmeyi kolaylaştırır. Örneğin, benim sürümümde, bir .h dosyasının C++ olup olmadığını (llvm bir C++ projesidir) belirlemek için '(string-match" llvm "(buffer-file-name))' gibi şeyler kullanırım. – zdav

32

C modu ve C++ kipini uygun şekilde kullanmak için başka bir yaklaşım, modu ayarlamak için directory local variables kullanmaktır.

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

Ve Emacs c++-mode zaman bunu moduna değişecektir: mod ayarlandıktan sonra C++ proje bu barındırması nedeniyle aslında bir .dir-locals.el dosyası yazmak böylece

Dizin değişkenler, değerlendirilir başlangıçta c-mode'a ayarlamıştı.

C ve C++ projelerinin bir karışımı ile çalışıyorsanız, bu proje başına oldukça basit bir çözüm sağlar.

Tabii ki, projelerinizin çoğunluğu C++ ise, C++ kipini varsayılan olarak olarak ayarlayabilir ve bu yaklaşımı, uygun olduğunda c moduna geçmek için tersine kullanabilirsiniz.


normal-mode aramalar (set-auto-mode) ve bu sırayla (hack-local-variables)., How can I access directory-local variables in my major mode hooks?

Bunu yapmak için varsayılan olarak C++ modunda .h dosyalarınızı açmanın .emacs dosyaya

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

ekleyin: Ayrıca bkz.

+3

Bu en yararlı cevaptır. Ayrıca, 'mode' dosya yerel değişken listelerinde özel bir form olup olmadığına dikkat edin ve yalnızca burada [http://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables html). – scry

+0

Dipnotu (2) ekledim, böylece cevabınız kendi kendine yeterli ve başkalarına bağımlı değil. Şimdi kabul edilen cevap olmalı. Teşekkürler. – YSC

+0

Bu çözüm, C++ - modunun .glsl dosyaları için de kullanılmasına neden olur. Bunun yerine glsl modunu zorlamak için herhangi bir yolu var mı? – jco

17

Görünüşe da dosyanın üstündeki bu koyabilirsiniz:

// -*-c++-*- 

bir C++ dosya var Emacs anlatmak için.

Oldukça sık bir vanilya Emacs ile sonuçlandığından ve herhangi bir şekilde Emacs yapılandırmadan çalıştığı için bunu kullanıyorum.

+1

Veya ayrıca: '// - * - mod: C++ - * -'. Orada da diğer değişkenleri ekleyebilirsiniz - '- * - kodlama: utf-8; mod: python; sekme genişliği: 4; - * - ' – donkopotamus

İlgili konular