代码之家  ›  专栏  ›  技术社区  ›  Saterus

更改Emacs默认编码系统

  •  23
  • Saterus  · 技术社区  · 16 年前

    我的问题源于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模式特别相关。不过我还是关不上。

    7 回复  |  直到 12 年前
        1
  •  9
  •   alephnull    16 年前

    默认情况下,Emacs不会将文件变量写入文件中。你一定要求它在你的.emacs中的某个地方这样做。尝试运行emacs-q并查看是否插入了文件变量。

        2
  •  11
  •   zetetic    15 年前

    这对我很有用:

    (setq ruby-insert-encoding-magic-comment nil)
    

    如建议 here

    我相信你是正确的,它只在Ruby模式下发生。Ruby模式似乎试图通过添加行来提供帮助,这使得Ruby自动检测源文件编码。

        3
  •  1
  •   danielpoe    16 年前

    更新: 我必须承认,我忽略了你关于变量插入的实际问题,所以我只回答了“如何设置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.
    ...
    
        4
  •  1
  •   Rudolf Olah    14 年前

    还可以使用目录局部变量设置变量: http://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html

    如果将具有特殊名称.dir-locals.el的文件放在目录中,Emacs将在访问该目录中的任何文件或其任何子目录时读取该文件,并将其指定的设置应用于该文件的缓冲区。Emacs从被访问文件的目录开始搜索.dir-locals.el,然后向上移动目录树。(为避免速度减慢,对远程文件跳过此搜索。)

        5
  •  0
  •   pajato0    16 年前

    首先,我同意最初的答案,但我也会补充说,如果我有您的问题,我会使用如下内容:

    (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)
    
        6
  •  0
  •   Roger Garza    13 年前

    我今天有这个问题。对我来说,问题是我从一封电子邮件中复制并粘贴了一些TODO文本。当我删除了那个文本,[#- -编码:UTF-8- -]已不再由Emacs插入。

        7
  •  0
  •   Michał Klich    12 年前

    在项目的根目录中,创建名为.dir-locals.el的文件,内容为:

    ((nil . ((buffer-file-coding-system . utf-8))))
    

    它会将此编码应用于任何模式和文件。 您可以在这里看到更多信息 https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html