【问题标题】:Set python indent to 2 spaces in emacs 23?在emacs 23中将python缩进设置为2个空格?
【发布时间】:2011-05-14 03:55:19
【问题描述】:

我在 Ubuntu 10.04 上使用 emacs 23.1.1。我希望在 Python 中使用 2 个空格缩进进行编程。 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关注?

【问题讨论】:

    标签: emacs python-mode


    【解决方案1】:

    您可以将其放入您的 .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 个空格。

    【讨论】:

    • 如果您使用此代码将缩进设置为与默认相同,您确定它甚至可以工作吗?
    • 我实际上使用了 Vulpecula 的修复(我的制表符缩进为 8)并解决了问题
    【解决方案2】:

    在您的 .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))))
    

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

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

    对于这两个问题,我发现创建挂钩和本地化变量会有所帮助。

    【讨论】:

    • 这个答案忽略了我的 .emacs 中已经有 tab-width 2 的事实,并且没有解释我所看到的任何内容。不过,我的设置现在可以正常工作(不知道为什么),所以我会接受。
    • 只是出于好奇,为什么将 (lambda ...) 包装在 (function ...) 中?我以前没见过 (function ...),手册表明没有必要。
    • 泰勒:从历史上看,它有所作为。它不再是必要的,但仍然是许多人的习惯。详情请见stackoverflow.com/questions/1852844/…
    • 我的 python-indent 为 2,tab-indent 为 2,但实际缩进量仍然为 1。像这样的东西在 emacs 中这种挑剔一点都不好。
    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 为了使用现有的 Python 代码,我需要将 python-guess-indent 设置为 nil 以使事情按我想要的方式工作。但是对于新的 Python 代码,它不是必需的。在我尝试此修复之前,这有点令人困惑。
    • 现在在 Emacs v26 中,python 模式变量的名称更长。我最终将此添加到我的自定义设置变量中。我只是想让它停止猜测并强制它为4。'(python-indent-guess-indent-offset nil)'(python-indent-offset 4)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2010-09-09
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多