emacs:将 python 空格转换为制表符

add*_*ons 4 python emacs whitespace tabs

目前我在我的 .emacs 文件中使用以下设置:

;; single tab for every indent
(add-hook 'python-mode-hook
  (lambda ()
    (setq indent-tabs-mode t)
    (setq python-indent 4)
    (setq tab-width 4)))
Run Code Online (Sandbox Code Playgroud)

这适用于我创建的任何新文件。如果我从 git/hg 下载一个恰好在空间上的项目,emacs 将不会将它们转换为空间上。无论文件的原始设置是什么,我如何强制 emacs 将所有空格转换为制表符。

我知道如果它是一个 git/hg 存储库,这将创建大量更改集,但我仍然想弄清楚如何通过我的 emacs 设置将任何带有空间的文件转换为选项卡。

leg*_*cia 6

用 标记整个缓冲区C-x h,然后使用M-x tabify

  • 由于这应该是幂等的,我想您可以向`python-mode-hook`添加一个函数。`(add-hook 'python-mode-hook #'(lambda () (tabify (point-min) (point-max))))` (2认同)
  • 当心。你*必须*在你`tabify`之前设置正确的`tab-width`:tabify根据缓冲区的当前tab-width将空格转换为制表符,这不一定与原作者用于缩进的空格数相同. 如果你弄错了,你最终会混合使用制表符和空格。(如果您的 Python 模式足够智能,可以自动为每个文件找出正确的值并相应地设置制表符宽度,那么这在实践中可能不是问题。) (2认同)
  • @alper 那是“Mx untabify”。 (2认同)