在emacs 23中将python缩进设置为2个空格?

时间:2010-11-22 23:11:01

标签: emacs python-mode

我在Ubuntu 10.04上使用emacs 23.1.1。我希望使用2空格缩进在Python中编程。 emacs看起来有python的默认模式(python.el?)。

我将以下内容放在我的.emacs中:

    ;; Only spaces, no tabs
    (setq indent-tabs-mode nil)

    ;; Always end a file with a newline
    (setq require-final-newline nil)

    ;; Don't know which of these might work
    (setq-default tab-width 2)
    (setq-default python-indent 2)
    (setq-default py-indent-offset 2)

当我编辑Python文件时,它使用4空格缩进。当我尝试C-h v python-indent时,它说:

    python-indent's value is 4
    Local in buffer webpage_cache.py; global value is 2

        This variable is safe as a file local variable if its value
        satisfies the predicate `integerp'.

    Documentation:
    Number of columns for a unit of indentation in Python mode.
    See also `M-x python-guess-indent'

    You can customize this variable.

也就是说,它是4,而不是2. Grr。我尝试自定义变量并保存,仍然是4.我尝试了自定义组缩进,仍然是4。

如何让emacs注意?

3 个答案:

答案 0 :(得分:17)

您的.emacs文件或.emacs引用的文件中添加:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 2)

如果你想本地化

,你可以放入一个钩子
;; Python Hook
(add-hook 'python-mode-hook
          (function (lambda ()
                      (setq indent-tabs-mode nil
                            tab-width 2))))

编辑:我发现以下问题可能会弄乱我的设置:

  • 在加载库之前设置变量
  • 重置全局变量的其他包/配置

对于这些问题,我发现创建钩子并对变量进行本地化可能有所帮助。

答案 1 :(得分:15)

您可以将其放入.emacs文件中:

(add-hook 'python-mode-hook '(lambda () 
 (setq python-indent 2)))

原因

    (setq-default python-indent 2)

不起作用可能因为加载.emacs时此变量不会退出。 (但我是一个emacs新手。我不确定我的解释。)

但是,PEP 8 -- Style Guide for Python Code建议“每个缩进级别有4个空格”,我发现4个空格更具可读性。我实际上使用这段代码来强制缩进4个空格。

答案 2 :(得分:15)

我自己遇到了这个问题,我认为python-indent的帮助包含了一个没有人提到过的大线索:

See also `M-x python-guess-indent'

如果您未通过将其设置为python-guess-indent来自定义nil,那么python.el将自动为每个Python缓冲区(包含缩进文本)设置python-indent,您的python-indent自定义无效。 (另一方面,在罗马时......)

最后,这是我.emacs文件中的内容(忽略所有其他自定义变量):

(custom-set-variables
 '(python-guess-indent nil)
 '(python-indent 2))