Emacs 25.3启用whitespace模式后文本变色问题求助
我来帮你搞定这个问题!你遇到的private变灰色的情况,大概率是Whitespace模式的默认face设置和你的语法高亮主题冲突了——它不小心覆盖了代码关键字的颜色样式。下面是几个靠谱的解决办法:
1. 先确认问题根源
先临时关闭Whitespace模式验证一下:按下M-x,输入whitespace-mode回车,看看private的颜色是不是恢复正常了。如果是的话,那肯定是Whitespace的face设置在搞鬼。
2. 自定义Whitespace的Face,只高亮空白元素
Whitespace模式默认会给一些元素设置face,但有时候会误影响正常代码。你可以在Emacs配置文件(~/.emacs或者~/.emacs.d/init.el)里添加以下代码,让它只针对空白相关的内容(比如 trailing空格、tab、空行)设置样式,不碰代码关键字:
;; 明确指定Whitespace要处理的空白元素类型 (setq whitespace-style '(face tabs spaces trailing space-before-tab newline indentation empty space-after-tab space-mark tab-mark newline-mark)) ;; 自定义Whitespace相关的Face,只修改空白元素的样式 (custom-set-faces '(whitespace-trailing ((t (:background "gray20")))) ; 末尾空格的背景色 '(whitespace-tab ((t (:background "gray20")))) ; Tab的背景色 '(whitespace-empty ((t (:background "gray20")))) ; 空行的背景色 ;; 你可以根据自己的喜好调整颜色,不要添加会影响正常文本的Face设置 )
添加完后重启Emacs或者执行M-x eval-buffer生效,再打开Whitespace模式看看效果。
3. 检查主题兼容性
如果上面的方法没用,可能是你当前使用的语法高亮主题和Whitespace模式不兼容。可以切换到Emacs默认主题试试:按下M-x,输入load-theme回车,再输入tango-dark(或者tango-light)回车,看看问题是否消失。如果消失了,你可以要么继续用兼容的主题,要么调整主题的Face设置来避开冲突。
4. 查看当前文本的Face详情
如果还是搞不清楚,可以用M-x describe-face命令,把光标移到变灰色的private上,点击它,看看弹出的Face列表里有没有whitespace-*开头的Face。如果有,就说明这个Whitespace的Face覆盖了代码关键字的语法高亮Face,你只需要在custom-set-faces里把这个Face的样式改成不影响文本颜色的就行(比如只改背景,不改前景色)。
内容的提问来源于stack exchange,提问作者n179911

