неправильный выход из отступа в emacs python-mode - PullRequest
7 голосов
/ 31 января 2012

Я использую Emacs python-mode.Я вызываю его, используя это в моем .emacs

(add-to-list 'load-path "~/emacs/python-mode.el-6.0.3/")
(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(require 'python-mode)
(add-hook 'python-mode-hook
      (lambda ()
    (set-variable 'py-indent-offset 4)
    ;(set-variable 'py-smart-indentation nil)
    (set-variable 'indent-tabs-mode nil)
    (define-key py-mode-map (kbd "RET") 'newline-and-indent)
    ;(define-key py-mode-map [tab] 'yas/expand)
    ;(setq yas/after-exit-snippet-hook 'indent-according-to-mode)
    ))

Обычно это в порядке, если я написал:

if condition:

, а затем нажал Return, он бы правильно поставил курсорв новой строке с отступом.Проблема в том, что он не правильно выводит из отступа.В других системах, когда я создаю новую строку в теле предложения с отступом (например, тело оператора if) и нажимаю клавишу Backspace, он отступает на один уровень в отступе, а не на backspace.Например, если бы у меня было:

if condition: 
  statement1
  statement2

и я нажал return, backspace, после statement2, он поместил бы курсор здесь:

if condition: 
  statement1
  statement2
<-- cursor position

Если у вас много идентифицированных уровнейи это не делает этого, редактирование Python становится невозможным, так как вы вынуждены возвращаться назад, пока не доберетесь до нужного уровня отступа ... это подвержено ошибкам и раздражает, например, если у вас было:

for something:
  for other:
    if hello:
      while x:
         statement1
         <-- How to indent back to level of "for other"?

EDIT : Мне не удалось заставить это работать, когда я запускал emacs как "emacs -nw" (я удаленно подключаюсь к серверу и не хочу, чтобы интерфейс X запускался).Когда я удаляю "-nw" и использую emacs, с более медленным интерфейсом X удаленно, все это работает ... есть идеи, почему это может быть?Может ли это быть проблема конфигурации оболочки, связанная с возвратами или что-то в этом роде?

Как это можно исправить?Я просто хочу, чтобы он отступал на уровне отступа, если я нахожусь в предложении.спасибо.

Ответы [ 5 ]

5 голосов
/ 31 января 2012

В современных версиях Emacs использовать python.el, а не python-mode.el .Если вы удалите все эти строки из вашего .emacs, я думаю, что python.el будет включен по умолчанию, и вы откроете режим Python при открытии файла .py.

Я протестировал пустую настройку по умолчаниюв моей системе и Backspace правильно восходит на один уровень отступа в вашем примере.

Так что ответ, кажется, "ничего не делать!":)


В Ubuntu python.el предоставляется пакетом emacs23-common, который является частью стандартной установки emacs:

% dpkg -S /usr/share/emacs/23.3/lisp/progmodes/python.elc
emacs23-common: /usr/share/emacs/23.3/lisp/progmodes/python.elc
1 голос
/ 11 октября 2012

Вместо возврата просто нажмите <tab>.Он должен перейти к следующему логическому месту отступа.

1 голос
/ 21 июля 2012

Это ошибка.

py-smart-indentation в последнее время ошибочно угадывает значение 4.

Чтобы быстро все исправить, сообщите об ошибках python-mode.el:

https://bugs.launchpad.net/python-mode

1 голос
/ 10 февраля 2012

Я предполагаю, что python-mode.el не поддерживает разную ширину отступа.Ваш последний пример использует 2 и 3 пробела для отступа.Почему вы не используете 4 пробела на отступ всегда?Использование 4 пробелов стандартный стиль .

РЕДАКТИРОВАНИЕ: Когда я открываю новый файл и копирую ваш последний пример, я могу воспроизвести то, что вы сказали.Однако, когда я закрою его и снова открою, я смог правильно выйти из отступа.Я мог бы сделать то же самое, выбрав код и нажав C-c : (py-guess-indent-offset) без закрытия / повторного открытия.

0 голосов
/ 22 июля 2012

исправлено в текущей магистрали

получить его на базаре:

bzr branch lp:python-mode

или через html download-button

https://launchpad.net/python-mode соответственно http://bazaar.launchpad.net/~python-mode-devs/python-mode/python-mode/files

...