Emacs中编辑保存makefile文件时会错误地将TAB转成空格的解决方法

问题描述

我的Emacs使用了Purcell的配置,在其配置中使用了whitespace-cleanup,且通过在.emacs.d/lisp/init-edit-utils.el中设定:

(require 'whitespace-cleanup-mode)
(global-whitespace-cleanup-mode t)

这样设定后,默认会全局使用whitespace-cleanup-mode,导致的结果是在保存文件前将TAB转换成对应的空格。这样的结果在多数情况下是我们想要的,但是对于有些类型的文件(比如makefile)而言便是灾难了。通过实测发现,只有当新建maekfile文件保存时,才会将TAB符替换成空格,导致makefile格式错误,而打开编辑一个已存在的makefile后保存则不存在这个问题。

解决方法

 

网上的方案

网上查了很多资料,基本都是以下解决方案:

;; 默认不加载indent-tabs-mode
(setq-default indent-tabs-mode nil)

;; 保存文件前执行一次whitespace-cleanup
(add-hook 'before-save-hook 'whitespace-cleanup)

;; 如果是打开makefile文件,则开启indent-tabs-mode,因为whitespace-cleanup中会用到这个
(add-hook 'makefile-mode-hook 'indent-tabs-mode)

但是我看了Purcell配置,发现两点跟以上解决方案不符:

  1. Purcell的配置并不是使用after-save-hook的,而是启用global-whitespace-cleanup-mode来实现空格处理的功能
  2. 当前版本的whitespace-cleanup-mode的实现代码中,并没用使用indent-tabs-mode,因此修改这个没用

我的解决方案

经过一系列的失败尝试后,我总算找到一种解决方案:

;; 后面设置tab-width部分只是个人喜好,与本问题无关
;; 当打开makefile文件时,禁用whitespace-cleanup-mode。其他类似需要保留TAB的文件类型也可以采用这种方法
(add-hook 'makefile-mode-hook
          (lambda ()
            (whitespace-cleanup-mode 0)
            (setq tab-width 8)))

现在,我们在Emacs中新建makefile文件并保存后,再也不会出现问题了!^_^

Author: Rex Shen

Created: 2014-03-05 Wed 15:41

Emacs 24.3.1 (Org mode 8.2.5h)

Validate

转载于:https://www.cnblogs.com/rex-tech/p/3582646.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值