Emacs 23内置python.el使用宽度为4的制表符时缩进错误

4 投票
2 回答
2053 浏览
提问于 2025-04-16 12:25

我在Emacs 23中使用了一个版本的python.el,这个版本可以在这里找到,已经用了好几年,没遇到什么问题。最近我决定试试默认的python.el,结果遇到了一个奇怪的问题:

当我用制表符(Tab)来缩进代码,并且设置制表符宽度为4时,默认的python.el每个缩进级别会插入两个制表符,而不是一个。如果我把制表符宽度设置为5,缩进就会变成1个制表符加3个空格。所以,当indent-tabs-mode设置为t时,indent-for-tab-command似乎总是强制将制表符大小设为8,不管我把tab-width设置成什么。

有没有其他与制表符相关的变量可以设置,以覆盖这种行为呢?

2 个回答

1

你是不是也在用制表符(tabs)搞得很烦?

你在试用 emacs 23 和 python.el 吗?

我最近也遇到了和你一样的问题……我发现我真的很讨厌制表符,而且 Python 对空白的要求让我觉得特别烦。

你是在初始化文件里设置 tab-width 还是用自定义选项设置的?

我必须在自定义选项里的“编辑基础”部分把 tab-width 改成“4个空格”,这样才能让它生效(这和全局/局部设置有关)。不过事情并没有那么简单…… python.el 似乎只想缩进到第一个制表符停靠点(现在是第4列),无论我怎么设置 indent-tab-mode 或 tab-always-indent 都没用。最后我放弃了,回去用了 python-mode.el,虽然它也有自己的一些怪癖,但至少 Python 代码的缩进是“正确的”。

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。我在两个模式下都使用这两个设置,没有遇到问题。

如果有人有更好的解决办法,请分享出来,我会很乐意接受作为正确答案。

撰写回答