You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Emacs 30后,如何配置避免修改Makefile中的空白字符?

解决Emacs 30中Makefile空白被自动修改的问题

要让Emacs在编辑和保存Makefile时完全保留原有的空白字符(不把空格转制表符,也不把制表符转空格),可以通过以下配置实现:

  • 给makefile-mode添加钩子,覆盖默认的空白处理规则:
    (add-hook 'makefile-mode-hook
              (lambda ()
                ;; 关闭缩进时的制表符/空格自动转换
                (setq-local indent-tabs-mode nil)
                ;; 禁止保存时自动调整空白(如tabify/untabify)
                (setq-local whitespace-action nil)
                ;; 关闭回车时的自动缩进功能,避免自动修改空白
                (electric-indent-mode -1)
                ;; 使用相对缩进,参考上一行的空白格式,不自动生成制表符或空格
                (setq-local indent-line-function #'indent-relative)
                ;; 匹配Makefile传统缩进宽度,避免模式因宽度差异自动调整空白
                (setq-local makefile-indent-level 8)
                (setq-local makefile-tab-width 8)))
    

配置说明

  1. setq-local indent-tabs-mode nil:覆盖makefile-mode默认启用的制表符缩进规则,避免Emacs自动将连续空格转换为制表符;配合其他设置,也不会触发制表符转空格的操作。
  2. whitespace-action nil:禁用whitespace-mode(若启用)在保存时自动清理或转换空白的行为。
  3. electric-indent-mode -1:关闭回车时的自动缩进,确保输入的空白完全由手动控制。
  4. indent-line-function #'indent-relative:让缩进操作参考上一行的空白格式,而非按照模式默认规则自动生成制表符或空格。
  5. 设置makefile-indent-level和makefile-tab-width为8:匹配Makefile传统的缩进宽度,避免模式因宽度不一致自动调整空白。

如果你的配置中启用了自动保存、自动格式化类插件,需要确保这些插件不对Makefile文件生效,可通过插件的例外规则或auto-mode-alist配置实现。

内容的提问来源于stack exchange,提问作者Marcus Hampel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:12:16