我的问题源于Emacs将编码系统头插入包含非ascii字符的源文件中:
# -*- coding: utf-8 -*-
我的同事不喜欢将这些标题检入我们的存储库。我不希望它们插入到我的文件中,因为Emacs会自动检测到该文件应该是UTF-8,因为这似乎对任何人都没有任何好处。
我想简单地将Emacs设置为自动为所有文件使用UTF-8,但它似乎不同意这个想法。为了解决这个问题,我已将以下内容添加到我的.emacs中:
(prefer-coding-system 'utf-8)
(setq coding-system-for-read 'utf-8)
(setq coding-system-for-write 'utf-8)
这似乎没有解决我的问题。 Emacs仍然将编码系统头插入我的文件中。有人有什么想法吗?
编辑:
我认为这个问题与ruby-mode特别相关。我仍然无法将其关闭。
答案 0 :(得分:11)
这对我有用:
(setq ruby-insert-encoding-magic-comment nil)
根据建议here
我相信你是正确的,它只发生在ruby模式中。似乎ruby-mode试图通过添加行来提供帮助,这使Ruby自动检测源文件编码。
答案 1 :(得分:9)
默认情况下,Emacs不会将文件变量写入您的文件。你必须要求它在你的.emacs中的某个地方这样做。尝试运行emacs -q并查看是否插入了文件变量。
答案 2 :(得分:1)
更新:我必须承认,我忽略了有关插入变量的实际问题,因此我只回答了“如何设置UTF-8部分”,对此抱歉。关于你的实际问题,我没有什么可补充的,通常emacs不会这样做。
也许this blog entry会帮助你。阅读coding-system-for-read
和coding-system-for-write
的文档并不表示您应该使用它:
coding-system-for-write is a variable defined in `C source code'.
Its value is nil
Documentation:
Specify the coding system for write operations.
Programs bind this variable with `let', but you should not set it globally.
...
答案 3 :(得分:1)
您还可以使用目录本地变量来设置变量:http://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
如果在目录中放置一个带有特殊名称.dir-locals.el的文件,Emacs会在访问该目录或其任何子目录中的任何文件时读取它,并将其指定的设置应用于文件的缓冲区。 Emacs从访问文件的目录开始搜索.dir-locals.el,然后向上移动目录树。 (为避免减速,远程文件会跳过此搜索。)
答案 4 :(得分:0)
首先,我同意原始答案,但我还要补充一点,如果我遇到了您的问题,我会使用以下内容:
(defun java-setup ()
(setq tab-stop-list
'(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92)
indent-tabs-mode nil
tab-width 4
fill-column 96
buffer-file-coding-system 'utf-8-unix
c-comment-start-regexp "\\(@\\|/\\(/\\|[*][*]?\\)\\)"))
(add-hook 'java-mode-hook 'java-setup)
答案 5 :(得分:0)
我今天遇到了这个问题。对我来说,问题是我从电子邮件中复制并粘贴了一些TODO文本。当我删除该文本时,emacs不再插入[# - - coding:utf-8 - - ]。
答案 6 :(得分:0)
在项目的根目录中创建名为.dir-locals.el的文件,内容为:
((nil . ((buffer-file-coding-system . utf-8))))
它会将此编码应用于任何模式和文件。 您可以在此处查看更多信息https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html