2010-11-27 21 views
16

emacs 23に同梱されているpythonモードを使用しています。マルチライン文の自動インデントをカスタマイズしたいと思います。例えば、現在、後続リストや辞書をemacsで関数を作成することは、私がemacs python-modeで複数行のインデントをカスタマイズする

を見たい

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

を好むとき、私は、また

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

を好む次

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

を好むemacsの

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

これらのカスタマイズをemacsでpython-modeにすることはできますか?これらのカスタマイズを作成するためのドキュメントを見つけることができません。

+3

通常は、希望の位置で停止するまで、「TAB」を繰り返し押してください。 – jfs

+0

複数行のステートメントで余分な行には機能しません。 –

+0

複数行ステートメントの最初と最後の行には 'TAB'だけを押す必要があります。最初の行はすべての次の行のインデントを設定し、最後の行で 'TAB 'を押すと、閉じ括弧のインデントが変更されます。 – jfs

答えて

1

py-indent-line関数でpython-mode.elを見たいと思うでしょう。

11

これはおそらく何か?

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

この回答に使用されるEmacsの機能のいくつかの議論のためのthis similar questionを参照してください。

関連する問題