Установить в Python отступ в 2 пробела в emacs 23?

Я использую emacs 23.1.1 в Ubuntu 10.04. Я хочу программировать на Python с отступом в 2 пробела. Похоже, в emacs есть режим по умолчанию для python (python.el?).

Я положил следующее в мой.emacs:

    ;; Only spaces, no tabs
    (setq indent-tabs-mode nil)

    ;; Always end a file with a newline
    (setq require-final-newline nil)

    ;; Don't know which of these might work
    (setq-default tab-width 2)
    (setq-default python-indent 2)
    (setq-default py-indent-offset 2)

Когда я редактирую файл Python, он использует отступ в 4 пробела. Когда я пытаюсь сделать Ch v python-indent, он говорит:

    python-indent's value is 4
    Local in buffer webpage_cache.py; global value is 2

        This variable is safe as a file local variable if its value
        satisfies the predicate `integerp'.

    Documentation:
    Number of columns for a unit of indentation in Python mode.
    See also `M-x python-guess-indent'

    You can customize this variable.

То есть это 4, а не 2. Гр. Я попытался настроить переменную и сохранить, все еще 4. Я попытался настроить группу отступов, все еще 4.

Как заставить Emacs обратить внимание?

3 ответа

Решение

Либо в вашем файле.emacs, либо в файле, на который ссылается ваш.emacs, добавьте:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 2)

Вы можете положить в крючок, если вы хотите локализовать

;; Python Hook
(add-hook 'python-mode-hook
          (function (lambda ()
                      (setq indent-tabs-mode nil
                            tab-width 2))))

РЕДАКТИРОВАТЬ: я обнаружил, что следующие проблемы могут испортить мои настройки:

  • установка переменной до загрузки библиотеки
  • другие пакеты / конфиги, сбрасывающие глобальные переменные

Для обеих этих проблем я обнаружил, что создание хуков и локализация переменных могут помочь.

Вы можете поместить это в свой файл.emacs:

(add-hook 'python-mode-hook '(lambda () 
 (setq python-indent 2)))

Причина по которой

    (setq-default python-indent 2)

не работает может, потому что эта переменная не завершается при загрузке.emacs. (Но я новичок в Emacs. Я не уверен в своем объяснении.)

Однако PEP 8 - Руководство по стилю для кода Python рекомендует "4 пробела на уровень отступа", и я считаю, что 4 пробела более читабельны. Я на самом деле использую этот кусок кода, чтобы заставить отступ в 4 пробела.

Я только столкнулся с этой проблемой сам, и я думаю, что помощь для python-indent содержит большой ключ, который никто не упомянул:

See also `M-x python-guess-indent'

Если вы не настраиваете python-guess-indent установив его на nil, затем python.el будет автоматически установлен python-indent для каждого буфера Python (который содержит текст с отступом), делая ваш python-indent настройка неэффективна. (С другой стороны, когда в Риме...)

В конце концов, это то, что вошло в мой .emacs файл (игнорируя все другие пользовательские переменные):

(custom-set-variables
 '(python-guess-indent nil)
 '(python-indent 2))
Другие вопросы по тегам