Установить отступ 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, чтобы обратить внимание?
Ответы
Ответ 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))