【问题标题】:emacs: Convert python spaces to tabsemacs:将python空格转换为制表符
【发布时间】:2013-12-12 00:18:37
【问题描述】:

目前我在 .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)))

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

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

【问题讨论】:

    标签: python emacs tabs whitespace


    【解决方案1】:

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

    【讨论】:

    • 既然这应该是幂等的,我想你可以给python-mode-hook添加一个函数。 (add-hook 'python-mode-hook #'(lambda () (tabify (point-min) (point-max))))
    • 小心。您必须tabify 之前设置正确的tab-width:tabify 根据缓冲区的当前制表符宽度将空格转换为制表符,这不一定与用于缩进的空格数相同原作者。如果你弄错了,你最终会混合使用制表符和空格。 (如果您的 python 模式足够聪明,可以自动为每个文件找出正确的值并相应地设置制表符宽度,那么这在实践中可能不是问题。)
    • ...虽然我看到您在 python 模式挂钩中设置制表符宽度,所以您很可能会破坏任何自动值。
    • 如何对空格进行制表符?
    • @alper 那是M-x untabify
    【解决方案2】:

    基于三元组的评论:

    (add-hook 'python-mode-hook
      (lambda ()
        (setq indent-tabs-mode t)
        (setq python-indent 4)
        (setq tab-width 4))
        (tabify (point-min) (point-max)))
    

    【讨论】:

    • 如何将它应用于所有编程钩子? @Andreas Röhler
    • @alper 尝试 prog-mode-hook,省略与 python 相关的行。
    • 如果我将tabify 替换为untabify,它会应用反向方法 where tab 到 4-space?
    • @alper 取决于按列排列的选项卡有多大,导致 4、8 个空格等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2010-10-02
    • 2014-04-27
    • 2013-01-24
    相关资源
    最近更新 更多