挺奇怪的,只有一个文件有这个问题,而且每次设置完 utf-8-dos 后,kill掉buffer再打开,就会多一个^M
不管了,我直接git恢复了。编码问题是真的奇怪,我发现有的buffer是
prefer-utf-8-dos
, 有的是 utf-8-dos
这个是真的怪,可能是因为你这个 buffer 默认没有指定编码类型。
可见版本控制是多么重要。
总结一下:
在 Windows 系统下尝试了以下两种配置:
(set-locale-environment "en_US.UTF-8")
(set-language-environment "UTF-8")
大部分情况下正常,但都没法解决在 M-x shell 出现乱码的问题。
所以目前我还是用回以前一直使用的配置:
这个配置其实是从 Purcell 的配置中来的,用了几年了。
至于个人Emacs 配置的跨平台分享,目前 Git 设置如下,保证Github 中都是 LF换行符:
在 macOS 和 Linx 系统中
git config --global core.autocrlf input # 只有在 pull 的时候转为 Unix 编码的 LF 换行
在 Windows 中自动转为 dos 编码的 CRLF
换行
git config --global core.autocrlf true # 在 clone 和 pull 的时候转为 `CRLF`,在 push 时转为` LF`
对于有的项目,如果只用于 Windows 平台,就在项目中加入.gitattributes
文件,设置需要的回车换行风格为 CRLF
,不需要自动转换。这个文件的设置会忽略 Git 的全局设置。
参考Github 文档 :
用describe-current-coding-system
比较两种方案的区别,发现只用set-language-environment
其实是可以的
(set-language-environment "UTF-8")
(prefer-coding-system 'gbk)
(prefer-coding-system 'utf-8)
如上设置,shell
不会出现乱码在windows上
看了下 set-locale-environment
的代码,实际上就是多修改了几个变量,同时根据输入的参数来合适地调用set-language-environment
。而且还对各系统做了一些特殊处理貌似,对于windows也就是一些变量保持windows默认,其他的就是多设置一点这样。
比如(set-locale-environment "en_US.UTF-8")
实际上会执行
(set-language-environment "English")
这跟(set-language-environment "UTF-8")
效果应该会不一样。(charset-priority-list)
就会不一样,其他的由set-language-environment
设置的变量都可能变化。
而(set-locale-environment "UTF-8")
除了多设置了几个变量以外,应该跟(set-language-environment "UTF-8")
效果是一样的,因为前者就是直接调用了后者。
这带来了问题,实际上set-locale-environment
并没有比set-language-environment
多做多少工作,reddit原文上也只是理解成不推荐set-locale-environment
而推荐set-language-environment
,这就让人很费解。我觉得如果有问题,当然实际上也存在问题,set-language-environment
也应该也有才正确。
Windows 上的编码问题很头痛,实在搞不清楚。
最近重装了 Windows 10 系统, 还是用下面的编码设置,但 M-x shell 没乱码了。系统用的默认区域设置。