Подтвердить что ты не робот

Изменение системы кодирования по умолчанию Emacs

Моя проблема связана с тем, что 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:

Я думаю, что эта проблема специально связана с рубиновым режимом. Я все еще не могу отключить его.

4b9b3361

Ответ 1

По умолчанию Emacs не будет записывать переменные файла в ваши файлы. Вы, должно быть, попросили его сделать это где-то в ваших .emacs. Попробуйте запустить emacs -q и посмотреть, вставлены ли переменные файла.

Ответ 2

Это работает для меня:

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

Как предложено здесь

Я считаю, что вы правы, что это происходит только в рубиновом режиме. Кажется, рубиновый режим пытается помочь, добавив строку, что заставляет Ruby автоматически обнаруживать кодировку исходного файла.

Ответ 3

Обновление: Я должен признать, что я упустил ваш актуальный вопрос относительно вставки переменных, поэтому я ответил только на "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.
...

Ответ 4

Вы также можете использовать локальные переменные каталога для настройки переменных: http://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html

Если вы поместите файл со специальным именем .dir-locals.el в каталог, Emacs прочитает его, когда он посещает любой файл в этом каталоге или в любом из его подкаталогов и применяет параметры, которые он задает в буфер файлов, Emacs ищет .dir-locals.el, начиная с каталога посещенного файла и перемещаясь по дереву каталогов. (Чтобы избежать замедления, этот поиск пропускается для удаленных файлов.)

Ответ 5

Во-первых, я согласен с исходным ответом, но я бы также добавил, что если бы у меня была ваша проблема, я бы использовал что-то вроде следующего:

(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

У меня была эта проблема сегодня. Для меня проблема заключалась в том, что я скопировал и наклеил текст TODO по электронной почте. Когда я удалил этот текст, [# - кодирование: utf-8 -] больше не был вставлен emacs.

Ответ 7

В корне вашего проекта создайте файл с именем .dir-locals.el с контентом:

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

Он применит эту кодировку к любому режиму и файлу. Вы можете увидеть больше информации здесь https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html