Emacs 23内置的python.el缩进在使用4个空格宽度的制表符时会出现问题

4
我在Emacs 23中使用了这里找到的版本为python.el几年了,一直没有出现问题。我决定尝试使用默认的python.el,但遇到了一个奇怪的问题:
当使用制表符缩进且制表符宽度为4时,stock python.el将每个级别缩进两个制表符字符而不是一个。当缩进宽度为5时,缩进将为1个制表符加3个空格。因此,在indent-tabs-mode为t时,无论tab-width设置为什么,indent-for-tab-command似乎总是强制进行8个制表符大小的缩进。
有没有其他与tab相关的变量可以设置以覆盖此行为?

不是回答你的问题,只是提醒:确保硬制表位始终为8个空格。较小的缩进应始终使用空格进行,而不是通过更改硬制表宽度来进行,否则您和其他人以后会遭受严重的头痛。 - Glenn Maynard
我不确定我是否理解了。在工作中,Python代码使用制表符进行缩进(我讨厌这个,但接受它)。我希望Emacs将制表符呈现为4个空格宽度。你是说这样做不好吗? - Will McCutchen
你考虑过使用python-mode吗?它由一些Python核心开发人员维护:https://launchpad.net/python-mode - Jeff Bauer
我肯定在某个时候尝试过各种非内置的Python模式...不过我想现在先看看能否用内置的模式应付。不过还是谢谢你的指点! - Will McCutchen
2个回答

4

在查看了标准的Emacs 23 python.el最新的python.el的源代码后,我认为我已经理解了这个问题。

python-mode缓冲区中设置这些选项,使用制表符进行缩进并且将制表符宽度设置为4,在标准的python.el中可以按预期工作:

(setq indent-tabs-mode t
      tab-width 4
      python-indent 4)

对于新的 python.el,您需要将 python-indent 更改为 python-indent-offset。我在两种模式下都使用这些设置,没有问题。
如果有人对此问题有更好的解决方案,请添加并我将乐意接受它作为正确答案。

1

被制表符困扰了吗?检查一下

正在尝试使用带有Python.el的emacs 23?检查一下

我最近遇到了与您相同的问题... 我所学到的是我真的讨厌制表符,而且我发现Python的空格重要性非常令人讨厌。

您是否在init或自定义中设置tab-width?

我必须确保通过自定义在“基本编辑”部分更改tab-width以使“4个空格”制表符起作用(与全局/局部范围有关)。但乐趣并没有结束... Python.el似乎只想要缩进到第一个制表位停止位置(现在是第4列),而不管我如何设置indent-tab-mode或tab-always-indent。最后,我放弃了,回到了使用python-mode.el,虽然它有自己的怪癖,但至少Python代码的缩进是“正确的”。


我正在直接在我的.emacs文件中设置制表符宽度,而不使用customize。结果发现有一个额外的python-indent变量,似乎可以让默认的python.el做到我想要的效果。 - Will McCutchen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接