2010-11-24 16 views
5

Est-ce que quelqu'un sait comment empêcher Emacs d'indenter le nom des fonctions ou des classes après une clause modèle?Emacs indent modèle classe/fonctions

CurrentY le résultat est:

template <typename T> 
    class A { 
    /* ... */ 
    }; 

où je voudrais avoir:

template <typename T> 
class A { 
/* ... */ 
}; 

Merci beaucoup pour votre aide. J'utilise le mode c + + avec java comme style de retrait pour c + +. J'ai personnalisé le c-offset-alist de cette façon:

(custom-set-variables 
;; 
'(c-offsets-alist (quote ((case-label . +) (innamespace . 0)))) 
+1

Avez-vous écrit quelque chose dans les emacs? Je reçois celui que vous demandez par défaut. J'ai commencé emacs -Q. – vpit3833

+0

@ vpit3833 J'ai édité la question pour clarifier la situation –

Répondre

8

Accédez à la ligne class et appuyez sur TAB pour effectuer l'indentation (non sollicitée).
Appuyez ensuite sur Control-CControl-Oto display the indent mode for-intro-supérieure cont`

Press ENTER, vous pouvez modifier le nombre tiret (3 à 0 par exemple).

A la fin de votre .emacs vous pouvez définir en permanence cette instruction:

(c-set-offset 'topmost-intro-cont 0 nil) 
+0

comment appuyer sur^C^o? Merci! – Beginner

0

Je ne sais pas, mais j'imagine que votre mode fait une différence. Dans quel mode éditez-vous? Je suppose que C++ - mode parce que vous avez c++ comme une balise.

Pour moi, en C++ - mode, il est avéré comme ceci:

template <typename T> 
class A { 
    /* ... */ 
}; 

Avec les commentaires dentelées, mais class A pas en retrait.

+0

Oui, je suis en mode C++ –

3

Il existe différents styles d'indentation pour le mode C++ d'Emacs. Quoting EmacsWiki:

Une liste partielle des plus connus styles C:

  • « gnu »: Le style par défaut pour les projets GNU
  • « k & r »: Qu'est-ce que Kernighan et Ritchie, les auteurs de C "bsd": Ce que les développeurs BSD utilisent, alias "Allman style" après Eric Allman.
  • « Stroustrup »: Qu'est-ce que Stroustrup, l'auteur de C++ utilisé dans son livre
  • « linux »: Ce que les développeurs Linux utilisent pour le développement du noyau
  • « python »: Qu'est-ce que les développeurs Python utilisent pour les modules d'extension
  • « java »: Le style par défaut pour java-mode (voir ci-dessous)
  • « utilisateur »: Lorsque vous voulez définir votre propre style

La variable c-default-style est ce que vous devez changer. Peut-être que l'un d'entre eux sera ce dont vous avez besoin. Je n'ai pas Emacs en ce moment, donc je ne peux pas les vérifier.

+0

Merci beaucoup. J'ai déjà choisi le style * java * comme style d'indentation pour C++, et l'ai personnalisé pour les espaces de noms en utilisant 'c-offsets-alist'. Je voudrais savoir s'il y a la possibilité de faire la même chose pour les templates –

0

Un couple de choses à vérifier:

J'ai vu des problèmes similaires lors de l'édition des fichiers C++ .h en mode C au lieu de C++ - Mode. Par défaut, les fichiers .h sont en mode C, pas en mode C++. [Vous pouvez le vérifier en recherchant « C++ » ou « C » entre parenthèses au bas de la fenêtre.] Vous pouvez emacs de configuration aux fichiers .h ouvrir toujours comme C++ en utilisant les éléments suivants dans votre .emacs

(setq auto-mode-alist (append '(("\\.h\\'" . c++-mode) 
       ) 
        auto-mode-alist 
       )) 

L'autre chose à vérifier est comment vous avez configuré votre style c-default. La page d'information pour "CC Mode" va dans beaucoup plus de détails sur toutes les possibilités.