Emacs 23内置python.el使用宽度为4的制表符时缩进错误
我在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 个回答
你是不是也在用制表符(tabs)搞得很烦?
你在试用 emacs 23 和 python.el 吗?
我最近也遇到了和你一样的问题……我发现我真的很讨厌制表符,而且 Python 对空白的要求让我觉得特别烦。
你是在初始化文件里设置 tab-width 还是用自定义选项设置的?
我必须在自定义选项里的“编辑基础”部分把 tab-width 改成“4个空格”,这样才能让它生效(这和全局/局部设置有关)。不过事情并没有那么简单…… python.el 似乎只想缩进到第一个制表符停靠点(现在是第4列),无论我怎么设置 indent-tab-mode 或 tab-always-indent 都没用。最后我放弃了,回去用了 python-mode.el,虽然它也有自己的一些怪癖,但至少 Python 代码的缩进是“正确的”。
我觉得我搞明白了这个问题,经过查看了原版 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
。我在两个模式下都使用这两个设置,没有遇到问题。
如果有人有更好的解决办法,请分享出来,我会很乐意接受作为正确答案。