Установить в Python отступ в 2 пробела в emacs 23? - PullRequest
20 голосов
/ 23 ноября 2010

Я использую 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. Grr.Я попытался настроить переменную и сохранить, все еще 4. Я попытался настроить отступ группы настройки, все еще 4.

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

Ответы [ 3 ]

17 голосов
/ 23 ноября 2010

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

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

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

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

15 голосов
/ 17 ноября 2011

Я сам столкнулся с этой проблемой, и я думаю, что справка для 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))
15 голосов
/ 13 декабря 2010

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

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

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

    (setq-default python-indent 2)

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

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

...