Электрический режим отступа ломает мой код Python
У меня есть этот код на Emacs с python-mode
включено:
def func(a):
if a:
return True
return False
Когда я перемещаю курсор между return False
а также def func(
код автоматически отступает, нарушая его:
def func(a):
if a:
return True
return False #Oops!
Я узнал, что это происходит из-за electric-indent-mode
второстепенный глобальный режим. Тем не менее, я пытался отключить его, но проблема остается.
Код elisp, который я использую, таков:
(defun disable-electric-indent ()
(set (make-local-variable 'electric-indent-functions)
(list (lambda (arg) 'no-indent))))
а это как мой python-mode-hook
выглядит:
(add-hook 'python-mode-hook
(lambda ()
(flyspell-prog-mode)
(auto-complete-mode)
(nlinum-mode)
(toggle-truncate-lines t)
(setq autopair-handle-action-fns
(list 'autopair-default-handle-action 'autopair-python-triple-quote-action))
(centered-cursor-mode)
(auto-indent-mode)
(autopair-mode)
(column-marker-1 80)
(flycheck-mode)
(setq ac-auto-start 2)
(disable-electric-indent) ;; esto deberia hacer que emacs deje de romper las pelotas con el codigo en python
(jedi:setup)))
Если я выключу auto-indent-mode
это поведение прекращается (однако, я не получаю авто отступ, glol).
моя версия Emacs: GNU Emacs 24.3.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.8.1) of 2013-04-29 on eric
РЕДАКТИРОВАТЬ: я использую python
пакет (встроенная поддержка летающего цирка Python для Emacs, вы знаете) в своей версии 0.24.2
По словам Мелпа. Может быть, я должен удалить его и использовать python-mode
пакет в его версии 6.0.10?
4 ответа
Вы можете попробовать
(defun my-disable-electric-indent ()
(set (make-local-variable 'electric-indent-mode) nil))
Я только что мигрировал в python-mode.el
и оставьте код, чтобы выключить electric-indent-mode
:)
Вы должны использовать (setq electric-indent-inhibit t)
в любом режиме, когда переиндентирование не должно происходить, например в режиме Python. Это официальный способ сделать это, как документ в C-h v electric-indent-inhibit
,
Предположим, что есть ошибка, она никогда не должна иметь отступ, как показывает ваш пример.
Кроме того, можно ожидать несколько конфликтов от режима авто-отступа, считая это плохим в режиме Python. Не в вашем примере, но в других местах есть отступ только выбор. Авто-отступ не может знать, где отступ тогда. В качестве символа новой строки и отступа он выберет наиболее вероятный вариант, который в некоторых случаях будет неправильным. Это может стать неприятным.