如何让 Emacs Python 模式为缩进生成 TAB?

Posted

技术标签:

【中文标题】如何让 Emacs Python 模式为缩进生成 TAB?【英文标题】:How to make Emacs Python mode generate TABs for indent? 【发布时间】:2011-10-04 12:14:55 【问题描述】:

我正在与一群使用 vim 的 Python 程序员合作,他们使用 TAB 来制作 Python 缩进。我将 Emacs 与 python-mode 一起使用,它将制表键转换为 4 个空格(应该如此,但没关系)。因为我不想造成麻烦,所以我想在我的 .emacs 文件(或其他文件)中添加一些内容,以使用真正的 TABS 进行缩进,而不是将它们转换为空格。怎么样?

很抱歉,如果在其他地方回答了这个问题:我没有找到它。

【问题讨论】:

【参考方案1】:

您可以使用python-mode-hook~/.emacs 中定义Python 特定的设置。为了使用制表符进行缩进,您可以使用:

(add-hook 'python-mode-hook
  (lambda () (setq indent-tabs-mode t)))

由于python.el只缩进4列,默认情况下,上述缩进为8的倍数时会使用制表符,其他缩进时会使用制表符后跟空格。

如果您需要为每个缩进级别使用一个标签,您还需要将 python-indent 设置为 8。然后您可以将 tab-width 设置为您希望标签显示为的任何宽度。

(add-hook 'python-mode-hook
  (lambda ()
    (setq indent-tabs-mode t)
    (setq python-indent 8)
    (setq tab-width 4)))

【讨论】:

我尝试将它放在不同的地方,但无法正常工作。我的 emacs 安装似乎正在使用我想过黑客攻击的“python.el.gz”。我应该改用 python-mode.el 吗? @Aaron:您可能确实让它工作了,但是由于 python.el 默认情况下每个级别只缩进 4 列,您还没有看到制表符的使用。我用更多解释更新了答案。【参考方案2】:

可能需要在python模式下这样做:

(setq indent-tabs-mode t)

【讨论】:

【参考方案3】:

正如帖子的评论者所说,使用制表符缩进是个坏主意,使用非标准制表符宽度更糟糕。尽管如此,如果您想合作,有时您别无选择。

根据您的同事对 vim 的具体配置方式,您可能需要两者打开 indent-tabs-mode 并将 tab-width 设置为 4。

使用file local variables 是一种不会弄乱您其他工作的便捷方法。在每个有问题的文件的末尾,写上:

# Local Variables:
# indent-tabs-mode: 1
# tab-width: 4
# End:

(你必须告诉 Emacs indent-tabs-mode 是一个安全的局部变量。)

【讨论】:

就我个人而言,我不喜欢文件局部变量,尤其是在您合作的情况下。想象一下,如果每个用户使用不同的编辑器,文件会是什么样子,并且他们都认为为他们的个人编辑器包含不同的简介是合适的。废话。 但是格式化设置是正确的放置文件!你投票支持打破风格吗?

以上是关于如何让 Emacs Python 模式为缩进生成 TAB?的主要内容,如果未能解决你的问题,请参考以下文章

emacs 修复 python 的制表符缩进

Python 的 Emacs 批量缩进

Emacs中的样式组件模式?

如何使 emacs 的行为更接近常规编辑器?

9.Emacs进阶之文本模式大纲模式

Ghostscript - 后记代码的缩进