Я использую Emacs для редактирования XML-файла, который также читается другим приложением. Другое приложение требует, чтобы файл начинался с маркера порядка байтов (BOM). Однако, похоже, что Emacs удаляет спецификацию каждый раз, когда я редактирую файл. Есть ли способ заставить Emacs оставить специализацию в покое?
3 ответа
Emacs будет писать спецификацию или нет в зависимости от того, какую систему кодирования она использует. Emacs автоматически выбирает систему кодирования, которую он использует при посещении файла.
Вы можете изменить систему кодирования на utf-8-with-signature, которая скажет Emacs написать спецификацию.
Чтобы изменить систему кодирования посещаемого файла, `Cx RET r utf-8-with-signature RET '.
Вы можете установить систему кодирования, которую Emacs использует для определенного файла, установив переменную файла. Обратитесь к разделу 57.3.4 «Локальные переменные в файлах», чтобы узнать, как это сделать.
Продолжение ответа Ричарда Хоскинса: если вы никогда не хотите, чтобы спецификация была скрыта emacs, вы можете отключить кодировки * -with-signature с помощью этого фрагмента:
(setq auto-coding-regexp-alist
(delete (rassoc 'utf-16be-with-signature auto-coding-regexp-alist)
(delete (rassoc 'utf-16le-with-signature auto-coding-regexp-alist)
(delete (rassoc 'utf-8-with-signature auto-coding-regexp-alist)
auto-coding-regexp-alist))))
Спецификация - это U+FEFF, «неразрывный пробел нулевой ширины», и она не отображается как поле в моем emacs 23.1.1 - вместо этого верхняя строка файла перемещается немного вниз, а иногда поле появляется вокруг первой строки - но вы можете видеть, что спецификация есть, и удалить ее, если это необходимо.
Emacs "сам" не должен связываться с спецификацией; если это действительно так, то это должен быть код, реализующий "режим" Emacs, который вы используете для редактирования своих файлов XML, удаляющих спецификацию. Поскольку вы не говорите, какой это, я могу только отослать вас к документации для этого режима, или что вы открываете файлы в fundamental-mode
(или аналогичном неразрушающем режиме). Или попробуйте M-x find-file-literally
если ничего не помогает.