Ответ 1
По умолчанию Emacs не будет записывать переменные файла в ваши файлы. Вы, должно быть, попросили его сделать это где-то в ваших .emacs. Попробуйте запустить emacs -q и посмотреть, вставлены ли переменные файла.
Моя проблема связана с тем, что 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 по-прежнему вставляет заголовки кодирующей системы в мои файлы. У кого-нибудь есть идеи?
EDIT:
Я думаю, что эта проблема специально связана с рубиновым режимом. Я все еще не могу отключить его.
По умолчанию Emacs не будет записывать переменные файла в ваши файлы. Вы, должно быть, попросили его сделать это где-то в ваших .emacs. Попробуйте запустить emacs -q и посмотреть, вставлены ли переменные файла.
Это работает для меня:
(setq ruby-insert-encoding-magic-comment nil)
Как предложено здесь
Я считаю, что вы правы, что это происходит только в рубиновом режиме. Кажется, рубиновый режим пытается помочь, добавив строку, что заставляет Ruby автоматически обнаруживать кодировку исходного файла.
Обновление: Я должен признать, что я упустил ваш актуальный вопрос относительно вставки переменных, поэтому я ответил только на "howto setup UTF-8 part", извините за это. Что касается вашего фактического вопроса, мне нечего добавить, обычно emacs этого не делает.
возможно эта запись в блоге помогает вам. Чтение документации 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.
...
Вы также можете использовать локальные переменные каталога для настройки переменных: http://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
Если вы поместите файл со специальным именем .dir-locals.el в каталог, Emacs прочитает его, когда он посещает любой файл в этом каталоге или в любом из его подкаталогов и применяет параметры, которые он задает в буфер файлов, Emacs ищет .dir-locals.el, начиная с каталога посещенного файла и перемещаясь по дереву каталогов. (Чтобы избежать замедления, этот поиск пропускается для удаленных файлов.)
Во-первых, я согласен с исходным ответом, но я бы также добавил, что если бы у меня была ваша проблема, я бы использовал что-то вроде следующего:
(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)
У меня была эта проблема сегодня. Для меня проблема заключалась в том, что я скопировал и наклеил текст TODO по электронной почте. Когда я удалил этот текст, [# - кодирование: utf-8 -] больше не был вставлен emacs.
В корне вашего проекта создайте файл с именем .dir-locals.el с контентом:
((nil . ((buffer-file-coding-system . utf-8))))
Он применит эту кодировку к любому режиму и файлу. Вы можете увидеть больше информации здесь https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html