如何让Emacs的Python模式生成制表符进行缩进?

17 投票
3 回答
9768 浏览
提问于 2025-04-16 21:25

我正在和一群使用vim的Python程序员一起工作,他们在写Python代码时使用TAB键来缩进。而我使用的是Emacs编辑器,里面的python-mode会把TAB键转换成4个空格(这其实是正确的做法,不过先不提这个)。因为我不想制造麻烦,所以我想在我的.emacs文件(或者其他地方)里加点东西,让它在缩进时使用真正的TAB,而不是把它转换成空格。请问该怎么做?

如果这个问题在别的地方已经回答过,我很抱歉,我没有找到。

3 个回答

0

正如帖子里的评论者们所说,使用制表符(tabs)来缩进代码其实是个坏主意,而使用不标准的制表符宽度就更糟了。不过,有时候如果你想和别人合作,就没办法了。

根据你同事的vim设置,你可能需要同时开启 indent-tabs-mode 和把 tab-width 设置为4。

有个方便的方法可以做到这一点,而且不会影响你其他的工作,那就是使用 文件本地变量。在每个有问题的文件的末尾,添加以下内容:

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

(你需要告诉Emacs indent-tabs-mode 是一个安全的本地变量。)

3

可能需要在Python模式下进行这个操作:

(setq indent-tabs-mode t)
17

你可以在你的 ~/.emacs 文件里设置一些专门针对Python的选项,使用 python-mode-hook。如果你想用制表符(也就是Tab键)来进行缩进,可以这样做:

(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)))

撰写回答