Подтвердить что ты не робот

Установить отступ 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 пробела. Когда я пытаюсь использовать C-h v python-indent, он говорит:

    python-indent 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. Grr. Я попробовал настроить переменную и сохранить, все еще 4. Я пробовал отступ по группе, еще 4.

Как мне получить emacs, чтобы обратить внимание?

4b9b3361

Ответ 1

Либо в файле .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))))

EDIT: я обнаружил, что следующие проблемы могут испортиться с моими настройками:

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

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

Ответ 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 пространства.

Ответ 3

Я сам столкнулся с этой проблемой, и я думаю, что помощь для 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))