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配置,发现两点跟以上解决方案不符:
- Purcell的配置并不是使用after-save-hook的,而是启用global-whitespace-cleanup-mode来实现空格处理的功能
- 当前版本的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文件并保存后,再也不会出现问题了!^_^
Emacs中编辑保存makefile文件时会错误地将TAB转成空格的解决方法的更多相关文章
- [转载]Java开发在线打开编辑保存Word文件
Java调用logo是“P”图标的第三方插件,实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 工具/原料 Eclipse或MyEclipse等j ...
- [原创]Java开发在线打开编辑保存Word文件(支持多浏览器)
Java调用PageOffice实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 1. 下载PageOffice开发包:http://www.zhuo ...
- .pages怎么在windows上打开?Windows下打开在Mac中编辑的.pages文件方法
.pages怎么在windows上打开?Windows下打开在Mac中编辑的.pages文件方法 1.最简单的方法是修改后缀名为.zip然后解压,解压后就可以看到一张图片,这个就是文档内容了. 2.更 ...
- Win7系统中提示:本地无法启动MySQL服务,报的错误:1067,进程意外终止的解决方法。
Win7系统中提示:本地无法启动MySQL服务,报的错误:1067,进程意外终止的解决方法. 在本地计算机无法启动MYSQL服务错误1067进程意外终止.这种情况一般是my.ini文件配置出错了1.首 ...
- 错误Name node is in safe mode的解决方法 (转)
原文链接:错误Name node is in safe mode的解决方法 将本地文件拷贝到hdfs上去,结果上错误:Name node is in safe mode 这是因为在分布式文件系统启动的 ...
- WPF:指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效的解决方法
文/嶽永鹏 WPF 数据绑定中绑定到ENTITY,如果把数据文件做成一个类库,在UI文件中去应用它,可能遇到下面这种情况. 指定的命名连接在配置中找不到.非计划用于 EntityClient 提供程序 ...
- 关于错误Access Violation和too many consecutive exceptions 解决方法
关于错误Access Violation和too many consecutive exceptions 解决方法 “如果DLL中用到了DELPHI的string类型,则DLL和主程序中都需要加上Sh ...
- Win10环境下 HTTP 错误 500.19 - Internal Server Error 问题及其解决方法
记一下今日份小bug... 明天要做软件架构实验了,今天打算测试下运行web项目,于是乎,找出了以前用JSP写的web项目测试运行不了,我再打开浏览器测试Tomcat服务器,在地址栏键入http:// ...
- 我的Android进阶之旅------>Android编译错误java.util.zip.ZipException: duplicate entry的解决方法
今天在Android Studio中把另外一个项目引入当前项目,编译的时候出现了java.util.zip.ZipException: duplicate entry错误. 错误如下所示: FAILU ...
随机推荐
- Hosts 文件的作用
问题来源: 我修改了hosts文件访问公司的内网 但是出现错误找不到服务器或DNS错误 一个下午了都上不了公司的系统. Hosts是什么?Hosts是Window系统目录里的一个文件,它的作用可大 ...
- git 基础学习笔记
配置ssh 打开命令行或者git bash 输入 创建git库 git init 检查当前状态 $ git status On branch master nothing to commit, wor ...
- Maven的安装学习笔记
安装 1.下载安装包:http://maven.apache.org/download.cgi 2.检查JDK是否安装,没有安装,先安装JDK cmd中输入:java -version 3.解压后配置 ...
- [leetcode] 101. Symmetric Tree 对称树
题目大意 #!/usr/bin/env python # coding=utf-8 # Date: 2018-08-30 """ https://leetcode.com ...
- CSS基础知识,学前准备
1.引入层叠样式表: A.行内引入 <bodystyle="background-color:#cccccc">; 在标签内使用style属性 </body> ...
- Linux中epoll+线程池实现高并发
服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理.通常多线程模型下,每个线程 ...
- 适合Centos Web服务器的iptables规则
适合Centos Web服务器的iptables规则IPT="/sbin/iptables"$IPT --delete-chain$IPT --flush$IPT -P INPUT ...
- HDU-5222 Exploration(拓扑排序)
一.题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5222 二.题意 给一个无向边+有向边的混合图,其中每条边只能使用一次,问图中是否存在环. 三.思路 ...
- Vue 目录结构分析 数据绑定 绑定属性 循环渲染数据 数据渲染
一.目录结构分析 node_modules 项目所需要的各种依赖 src 开发用的资源 assets 静态资源文件 App.vue 根组件 main.js 配置路由时会用 .babelrc 配置文件 ...
- Xshell连接虚拟机突然被拒,提示再次输入密码。。。
sudo vim /etc/ssh/sshd_config 将 # Authentication: LoginGraceTime 120 PermitRootLogin prohibit-passwo ...