我正在使用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:
当我按下回车键时,它确实将光标放在新的缩进换行符中。问题是,它不能正确地退出缩进。在其他系统中,当我在缩进子句的正文(如if语句正文)中新建一行并按下退格键时,它会跳出一个缩进级别,而不是后退。例如,如果我有:
if condition:
statement1
statement2
当我在语句2
后按回车或删除键时,光标会出现在这里:
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 -nw"方式运行时(我是远程登录服务器,不想启动X界面),我无法让它正常工作。当我删除“-nw”并使用较慢的远程X界面时,一切都可以正常工作...有任何想法为什么会这样吗?这可能与退格或类似问题相关的shell配置问题有关吗?如何解决这个问题?我只希望在子句中使用缩进级别时进行退格。谢谢。
emacs --no-init-file
命令启动emacs。当我以这种方式启动emacs时,在Ubuntu 11.10,GNU Emacs 23.3.1 (GTK+ version 2.24.5)上退格键可以正常工作。 - unutbu