2010-11-27 15 views
16

Estoy usando el modo python enviado con emacs 23. Quiero personalizar la sangría automática de sentencias de varias líneas. Por ejemplo emacs actualmente prefiere el siguienteEn emacs python-mode personaliza la sangría de instrucción de varias líneas

my_var = [ 
    'val1', 
    'val2', 
    'val3', 
    ] 

yo preferiría

my_var = [ 
    'val1', 
    'val2', 
    'val3', 
] 

Además, cuando la creación de funciones con una lista al final, o emacs dict prefiere

my_func('first_arg', 'another_arg', { 
     'key1': val1, 
     'key2': val2, 
     }) 

me gustaría ver

my_func('first_arg', 'another_arg', { 
    'key1': val1, 
    'key2': val2, 
}) 

¿Es posible crear estas personalizaciones en python-mode en emacs? No puedo encontrar ninguna documentación que cree estas personalizaciones.

+3

Normalmente solo presiono 'TAB' repetidamente hasta que se detiene en la posición deseada. – jfs

+0

Eso no funcionará para las líneas adicionales en una instrucción de varias líneas. –

+0

Solo tiene que presionar 'TAB' para la primera y la última línea de una instrucción de varias líneas. La primera línea establece la sangría para todas las líneas siguientes y presiona 'TAB' en la última línea para cambiar la sangría del paréntesis de cierre. – jfs

Respuesta

1

Querrá ver python-mode.el en la función py-indent-line.

11

¿Algo como esto, quizás?

(defadvice python-calculate-indentation (around outdent-closing-brackets) 
    "Handle lines beginning with a closing bracket and indent them so that 
they line up with the line containing the corresponding opening bracket." 
    (save-excursion 
    (beginning-of-line) 
    (let ((syntax (syntax-ppss))) 
     (if (and (not (eq 'string (syntax-ppss-context syntax))) 
       (python-continuation-line-p) 
       (cadr syntax) 
       (skip-syntax-forward "-") 
       (looking-at "\\s)")) 
      (progn 
      (forward-char 1) 
      (ignore-errors (backward-sexp)) 
      (setq ad-return-value (current-indentation))) 
     ad-do-it)))) 

(ad-activate 'python-calculate-indentation) 

Ver this similar question para una discusión de algunas de las características de Emacs se usa en esta respuesta.

Cuestiones relacionadas