如何使Emacs的Python模式生成TAB来进行缩进?

17

我与一群使用 vim 的 Python 程序员共事,他们使用制表符来缩进 Python 代码。我使用带有 python-mode 的 Emacs,它会将 Tab 键翻译为 4 个空格(虽然应该这样,但不要在意)。由于我不想引起麻烦,所以我想在我的 .emacs 文件中添加一些内容(或其他文件)以便使用真正的 TABS 进行缩进,而不是将它们转换为空格。如何做到这一点?

如果此问题已经在其他地方得到解答,请见谅:我没有找到。

3个回答

17
您可以使用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 Watters
@Aaron:你可能已经使其正常工作了,但由于 python.el 默认每级只缩进 4 列,所以你还没有看到选项卡的使用。我更新了答案并附上了更多解释。 - jamessan

3

可能需要在Python模式下执行此操作:

(setq indent-tabs-mode t)

0

正如评论者在帖子中正确指出的那样,使用制表符进行缩进是一个坏主意,而使用非标准制表符宽度更糟糕。尽管如此,如果你想要协作,有时候你别无选择。

根据你的同事如何配置vim,你可能需要同时打开indent-tabs-mode并将tab-width设置为4。

一种方便的方法是使用文件局部变量,这不会破坏你的其他工作。在每个有问题的文件末尾,加上这个:

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

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


2
个人而言,我不喜欢文件本地变量,特别是在协作时。想象一下,如果每个用户使用不同的编辑器,并且他们都认为应该包含不同的个人编辑器信息,那么文件会变成什么样子。呕。 - jtahlborn
但是格式设置正确地放置到文件中了!你赞成破坏样式吗? - gavenkoa

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