更改Emacs默认编码系统

时间:2009-11-23 18:53:11

标签: emacs encoding utf-8

我的问题源于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特别相关。我仍然无法将其关闭。

7 个答案:

答案 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-readcoding-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