如何让 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?的主要内容,如果未能解决你的问题,请参考以下文章