升级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)))
配置说明
setq-local indent-tabs-mode nil:覆盖makefile-mode默认启用的制表符缩进规则,避免Emacs自动将连续空格转换为制表符;配合其他设置,也不会触发制表符转空格的操作。whitespace-action nil:禁用whitespace-mode(若启用)在保存时自动清理或转换空白的行为。electric-indent-mode -1:关闭回车时的自动缩进,确保输入的空白完全由手动控制。indent-line-function #'indent-relative:让缩进操作参考上一行的空白格式,而非按照模式默认规则自动生成制表符或空格。- 设置
makefile-indent-level和makefile-tab-width为8:匹配Makefile传统的缩进宽度,避免模式因宽度不一致自动调整空白。
如果你的配置中启用了自动保存、自动格式化类插件,需要确保这些插件不对Makefile文件生效,可通过插件的例外规则或auto-mode-alist配置实现。
内容的提问来源于stack exchange,提问作者Marcus Hampel
相关产品推荐
相关产品推荐

