Change Emacs Default Coding System
My problem stems from Emacs inserting the coding system headers into source files containing non-as开发者_运维百科cii 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.
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.
By default, Emacs will not write file variables into your files. You must have asked it to do so somewhere in your .emacs. Try running emacs -q and see if the file variables get inserted.
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.
...
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.)
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)
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.
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
精彩评论