2009-06-05 14 views
8

In questo momento l'emacs indentazione standard funziona come la seguente:Emacs rientro di pausa dopo switch


switch (cond) { 
case 0: { 
    command; 
} 
    break; 
} 

Voglio la pausa; allinearsi con il caso.

Inoltre, c'è un elenco dei comandi offset di c-set da qualche parte?

+1

Voi sapete che le staffe tra il caso e l'interruzione non sono necessari a meno che non sia necessario 1) dichiarare variabili nel caso e 2) ramo nel caso, non è vero? – dmckee

+0

Sì, lo so. Forza dell'abitudine. –

risposta

22

Il più grande aiuto (che ho trovato) nella personalizzazione dell'indentazione è capire che cosa cc-mode usa per indentare la riga corrente. Ecco cosa C-c C-o alias M-x c-set-offset può fare - ti permetterà di personalizzare l'offset per un elemento sintattico, e ti mostrerà quale elemento è stato usato per la linea corrente!

Ecco come è possibile personalizzarlo. Sposta il cursore sulla riga break;.

C-c C-o RET 0 RET 

A quel punto, il codice rientrato come:

switch (cond) { 
case 0: { 
    command; 
} 
break; 
} 

Per la documentazione sulle compensazioni, controlla la docstring per la variabile 'c-offsets-alist

C-h v c-offsets-alist RET 

Allo stesso modo, è possibile aggiungi questo al tuo .emacs:

(setq c-offsets-alist '((statement-case-intro . 0))) 

La documentazione per la personalizzazione dell'indentazione è here e vale la pena leggerla. Ci sono un sacco di modi per farlo, quindi leggere il manuale vale la pena (se si desidera un rientro non predefinito). Ed ecco un puntatore a tutti gli syntactic symbols utilizzati in cc-mode.

+3

Non so se questa risposta è stata utile per l'OP, ma è dannatamente sicuro per me. Sono stato infastidito dal fatto che Emacs abbia insistito per far rientrare la parentesi graffa aperta sui blocchi per anni. Grazie! –

+0

Fantastico, ha funzionato perfettamente. Utilizzo Emacs da un paio d'anni ma solo da poco ho iniziato a personalizzarlo. Quindi l'emacs-lisp è tutto estraneo a me. Grazie per il doc. –

+0

Purtroppo, 'statement-case-intro' influenza la prima affermazione di un caso, qualunque essa sia. Mi piacerebbe solo superare la pausa e non trovo il modo di farlo. (Non è la mia preferenza personale, sto solo cercando di scrivere uno stile coerente con una base di codice esistente). –

0

Per me, ricevendo istruzioni switch php-mode per far rientrare correttamente richiede:

 (c-set-offset (quote brace-list-entry) 2 nil) 
     (c-set-offset (quote case-label) 2 nil) 

Ma, come altri hanno detto, Cc Co è tuo amico .....

Problemi correlati