emacs 23 стиль авто-отступа python.el - это можно настроить? - PullRequest
13 голосов
/ 23 февраля 2011

Я использую emacs 23 (python.el) чуть больше месяца, и меня не устраивают настройки автоотступов по умолчанию.

В настоящее время мои файлы Python автоматически имеют следующие отступы:

x = a_function_with_dict_parameter({
                                   'test' : 'Here is a value',
                                   'second' : 'Another value',
                                   })
a_function_with_multiline_parameters(on='First', line='Line',
                                     now_on='Second', next_line='Line',
                                     next='Third', finally='Line')

Я бы предпочел, если бы я мог установить параметры автоматического отступа, чтобы тот же код можно было легко отформатировать:

x = a_function_with_dict_parameter({
    'test' : 'Here is a value',
    'second' : 'Another value',
})
a_function_with_multiline_parameters(on='First', line='Line',
    now_on='Second', next_line='Line', next='Third', finally='Line')

Похоже, логика для выполнения автоматического отступа будет такой:

Если последний символ (без комментариев / пробелов) предыдущей строки является:, увеличьте уровень отступа на 1. Иначе, используйте тот же уровень отступа.

Но, используя эту логику, TAB потребуется на самом деле увеличить уровень отступа текущей строки. (В настоящее время TAB только перемещает строку на уровень автоматического отступа)

Кто-нибудь знает, как я могу изменить авто-отступ emacs для достижения желаемого стиля?

Ответы [ 3 ]

3 голосов
/ 19 марта 2011

Вы можете попробовать этот код:

(require 'python)

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

Теперь, простой диктон Python вроде этого:

a = {'foo': 'bar',
     'foobar': 'barfoo'
    }

становится ...

a = {'foo': 'bar',
     'foobar': 'barfoo'
}
1 голос
/ 24 февраля 2011

Попробуйте использовать последнюю версию fgallina python.el . Он содержит множество других улучшений .

Я использую эту версию, и TAB ведет себя так, как вы хотите, но я сделал несколько изменений в python.el, поэтому я не уверен, что вы получите то же поведение. Если это так, дайте мне знать.

0 голосов
/ 16 марта 2011

Mx настраиваемая группа RET python RET

...