2

我在 Emacs 上python-mode启用了以下代码:

def func(a):
    if a:
        return True
    return False

当我在之间移动光标时return Falsedef 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此行为会停止(但是,我没有自动缩进,gol)。

我的 emacs 版本:GNU Emacs 24.3.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.8.1) of 2013-04-29 on eric

编辑:根据 melpa python,我在其版本中使用包(内置 Python 对 Emacs 的飞行马戏团支持,你知道) 。0.24.2也许我应该删除它并python-mode在其版本 6.0.10 中使用包?

4

4 回答 4

3

你可能想试试

(defun my-disable-electric-indent ()
  (set (make-local-variable 'electric-indent-mode) nil))
于 2013-06-14T02:44:53.827 回答
0

我刚刚迁移到python-mode.el并留下代码以关闭electric-indent-mode:)

于 2013-06-15T04:53:53.647 回答
0

假设有一个错误,它不应该像您的示例所示那样缩进。

除了会预期自动缩进模式会产生一些冲突,认为它对 python 模式是一件坏事。不是在您的示例中,但在其他地方,缩进只是一个选择。自动缩进不知道在哪里缩进。作为换行和缩进,它会选择最可能的,这在某些情况下是错误的。那可能会变得很糟糕。

于 2013-06-14T05:32:22.340 回答
0

当不应该发生重新缩进时,您应该(setq electric-indent-inhibit t)在任何模式下使用,例如 python 模式。这是官方的做法,如C-h v electric-indent-inhibit.

于 2015-12-31T02:00:26.447 回答