В Python-режиме Emacs настроить многострочный отступ оператора - PullRequest
16 голосов
/ 27 ноября 2010

Я использую python-режим, поставляемый с emacs 23. Я хочу настроить авто-отступ многострочных операторов. Например, в настоящее время emacs предпочитает следующее

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

Я бы предпочел

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

Также, при создании функций с конечным списком или dict emacs предпочитает

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

Хотелось бы увидеть

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

Можно ли создать эти настройки для режима python в emacs? Я не могу найти никакой документации, создающей эти настройки.

Ответы [ 2 ]

11 голосов
/ 02 декабря 2010

Что-то вроде этого, возможно?

(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, используемых в этом ответе.

1 голос
/ 02 декабря 2010

Вы захотите взглянуть на python-mode.el для функции py-indent-line.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...