2010-11-22 1 views
18

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

я поставил следующие в моем .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'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, чтобы обратить внимание?

ответ

14

Либо в вас .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: У меня есть были обнаружены следующие проблемы, которые могут испортить мои настройки:

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

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

+0

Этого ответ игнорирует тот факт, что у меня уже была закладка шириной 2 в моем .emacs, и не объясняет, что я видел. Тем не менее, моя настройка работает сейчас (не знаю почему), поэтому я соглашусь. – dfrankow 2010-11-23 17:49:11

+0

Спасибо за ваше редактирование! – dfrankow 2010-11-24 04:02:04

+0

Просто из любопытства, зачем обертывать (лямбда ...) в (функция ...)? Раньше я не видел (функция ...), и руководство предполагает, что это необязательно. – Tyler 2010-12-13 04:21:19

14

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

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

Причина, почему

(setq-default python-indent 2) 

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

Однако PEP 8 -- Style Guide for Python Code рекомендует «4 пробела на уровень отступов», и я нахожу 4 пробела более читабельными. Я на самом деле использую этот кусок кода, чтобы форсировать отступ в 4 пространства.

13

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