2010-11-27 6 views
16

Ich verwende den Python-Modus mit Emacs 23. Ich möchte die automatische Einrückung von MZ-Anweisungen anpassen. Zum Beispiel Emacs derzeit folgendenIn Emacs Python-Modus anpassen mehrzeiligen Anweisung Einzug

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

lieber würde ich

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

auch bevorzugen, bei der Erstellung von Funktionen mit einer abschließenden Liste oder dict Emacs bevorzugt

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

Ich mag

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

Ist es möglich, diese Anpassungen im Python-Modus in Emacs zu erstellen? Ich kann keine Dokumentation finden, die diese Anpassungen erstellt.

+3

Ich drücke einfach immer 'TAB' so oft, bis es an der gewünschten Position stoppt. – jfs

+0

Das wird für die zusätzlichen Zeilen in einer mehrzeiligen Anweisung nicht funktionieren. –

+0

Sie müssen nur TAB für die erste und die letzte Zeile einer mehrzeiligen Anweisung drücken. Die erste Zeile setzt den Einzug für alle folgenden Zeilen und Sie drücken auf der letzten Zeile TAB, um den Einzug der schließenden Klammer zu ändern. – jfs

Antwort

1

Sie sollten sich python-mode.el bei der Funktion py-indent-line ansehen.

11

So etwas vielleicht?

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

Siehe this similar question für eine Diskussion über einige der Emacs in dieser Antwort verwendeten Funktionen.

Verwandte Themen