7

我正在使用 Emacs python 模式。我在我的.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:

然后按回车键,它会正确地将光标放在缩进的换行符中。问题是它没有正确退出缩进。在其他系统中,当我在缩进子句的主体(如if语句主体)中创建一个新行并按退格键时,它会在缩进中跳出一级,而不是退格。例如,如果我有:

if condition: 
  statement1
  statement2

然后我按回车键,退格键,之后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"?

编辑:在将emacs作为“emacs -nw”运行时,我无法让它工作(我正在远程登录服务器并且不希望X界面启动)。当我删除“-nw”并远程使用较慢的 X 接口的 emacs 时,一切正常……知道为什么会这样吗?可能是与退格或类似问题相关的 shell 配置问题吗?

如何解决这个问题?如果我在一个子句中,我只希望它在缩进级别退格。谢谢。

4

5 回答 5

5

对于现代版本的 Emacs,使用 python.el,而不是 python-mode.el。如果你从你的 .emacs 中删除所有这些行,我认为 python.el 将默认启用,当你打开一个 .py 文件时你会得到一个 Python 模式。

我在我的系统上测试了空白默认设置,并且在您的示例中退格正确地返回了一级缩进。

所以答案似乎是,“什么都不做!” :)


在 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
于 2012-01-30T23:55:29.623 回答
1

这是一个错误。

py-smart-indentation 最近一直错误地猜测值 4。

要快速修复问题,请在以下位置报告 python-mode.el 错误:

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

于 2012-07-21T09:14:34.580 回答
1

而不是退格,只需按<tab>。它应该跳转到下一个逻辑缩进位置。

于 2012-10-10T23:21:23.217 回答
1

我的猜测是 python-mode.el 不支持具有不同的缩进宽度。您的最后一个示例使用 23 个空格进行缩进。为什么不总是在每个缩进中使用 4 个空格?使用 4 个空格是标准样式

已编辑:当我打开一个新文件并复制您的上一个示例时,我可以重现您所说的内容。但是,当我关闭它并重新打开它时,我可以正确退出缩进。我可以通过选择代码并点击C-c :(py-guess-indent-offset)而不关闭/重新打开来做同样的事情。

于 2012-02-09T21:42:43.960 回答
0

固定在当前主干中

使用集市获得它:

bzr branch lp:python-mode

或通过 htmldownload-button

https://launchpad.net/python-mode 分别。 http://bazaar.launchpad.net/~python-mode-devs/python-mode/python-mode/files

于 2012-07-21T21:09:39.193 回答