2009-06-05 11 views
8

En este momento el emacs muesca estándar funciona como la siguiente:Emacs sangría de descanso después de instrucción switch


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

Quiero la ruptura; alinearse con el estuche.

Además, ¿hay alguna lista de los comandos c-set-offset en alguna parte?

+1

usted sabe que los soportes entre el caso y la ruptura son innecesarios a menos que necesites 1) declarar variables en el caso y 2) ramificar en el caso, ¿no? – dmckee

+0

Sí, lo hago. Fuerza del hábito. –

Respuesta

22

La mayor ayuda (que he encontrado) en la personalización de la sangría es averiguar qué usa cc-mode para sangrar la línea actual. Eso es lo que puede hacer C-c C-0 aka M-x c-set-offset - le permitirá personalizar el desplazamiento de un elemento sintáctico, y le muestra qué elemento se utilizó para la línea actual.

Así es cómo puedes personalizarlo. Mueva el cursor a la línea break;.

C-c C-o RET 0 RET 

En ese momento, su código se indentarán como:

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

Para obtener documentación sobre las compensaciones, echa un vistazo a la cadena de documentación para la variable 'c-offsets-alist

C-h v c-offsets-alist RET 

Del mismo modo, se puede agréguele esto a su .emacs:

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

La documentación para personalizar la sangría es here y vale la pena leerla. Hay muchísimas formas de hacerlo, por lo que leer el manual vale la pena (si desea una sangría no predeterminada). Y aquí hay un puntero a todos los syntactic symbols utilizados en el modo cc.

+3

No sé si esta respuesta fue útil para el OP, pero de seguro fue para mí. Me ha molestado que emacs haya insistido en sangrar el corsé de apertura en bloques durante años. ¡Gracias! –

+0

Impresionante, funcionó a la perfección. He estado usando emacs durante un par de años, pero solo recientemente comencé a personalizarlo. Entonces el emacs-lisp es completamente extraño para mí. Gracias por el doc. –

+0

Lamentablemente, 'statement-case-intro' afecta la primera instrucción en un caso, cualquiera que sea. Me gustaría simplemente 'salir ', y no puedo encontrar la manera de hacerlo. (No es mi preferencia personal, solo intento escribir un estilo consistente con una base de código existente). –

0

Para mí, conseguir sentencias switch-mode php para sangrar correctamente requiere:

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

Pero, como otros han mencionado, Cc Co es su amigo .....

Cuestiones relacionadas