Change Emacs Default Coding System

2019-03-09 19:01发布

My problem stems from Emacs inserting the coding system headers into source files containing non-ascii characters:

# -*- coding: utf-8 -*-

My coworkers do not like these headers being checked into our repositories. I don't want them inserted into my files because Emacs automatically detects that the file should be UTF-8 regardless so there doesn't seem to be any benefit to anyone.

I would like to simply set Emacs to use UTF-8 automatically for all files, yet it seems to disagree with this idea. In an effort to fix this, I've added the following to my .emacs:

(prefer-coding-system 'utf-8)
(setq coding-system-for-read 'utf-8)
(setq coding-system-for-write 'utf-8)

This does not seem to solve my problem. Emacs still inserts the coding-system headers into my files. Anyone have any ideas?

EDIT:

I think this problem is specifically related to ruby-mode. I still can't turn it off though.

7条回答
一纸荒年 Trace。
2楼-- · 2019-03-09 19:09

First, I agree with the the original answer, but I would also add that if I had your issue I would use something like the following:

(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)
查看更多
相关推荐>>
3楼-- · 2019-03-09 19:13

You can also use directory local variables to set up the variables: http://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html

If you put a file with a special name .dir-locals.el in a directory, Emacs will read it when it visits any file in that directory or any of its subdirectories, and apply the settings it specifies to the file's buffer. Emacs searches for .dir-locals.el starting in the directory of the visited file, and moving up the directory tree. (To avoid slowdown, this search is skipped for remote files.)

查看更多
乱世女痞
4楼-- · 2019-03-09 19:17

I had this problem today. For me, the problem was that I copied and pasted some TODO text from an email. When I removed that text, [ # -- coding: utf-8 -- ] was no longer inserted by emacs.

查看更多
混吃等死
5楼-- · 2019-03-09 19:25

This works for me:

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

As suggested here

I believe you're correct that it only happens in ruby-mode. It seems ruby-mode is trying to be helpful by adding the line, which makes Ruby detect the source file encoding automatically.

查看更多
来,给爷笑一个
6楼-- · 2019-03-09 19:25

In root of your project create file called .dir-locals.el with content:

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

It will apply this coding to any mode and file. You may see more info here https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html

查看更多
爷的心禁止访问
7楼-- · 2019-03-09 19:27

Update: I must admit, that I overlooked your actual question concerning the insertion of the variables, so I only answered the "howto setup UTF-8 part", sorry about this. Concerning your actual question I have nothing to add, normally emacs doesn't do this.

maybe this blog entry helps you. Reading the documentation of coding-system-for-read and coding-system-for-write doesn't suggest that you should use it:

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.
...
查看更多
登录 后发表回答