Когда Vim читает существующий файл, он пытается определить кодировку файла. При записи файла Vim использует обнаруженную кодировку файла (кроме случаев, когда вы говорите по-другому). Таким образом, файл, обнаруженный как UTF-8, записывается как UTF-8, файл, обнаруженный как Latin-1, записывается как Latin-1 и так далее.
По умолчанию процесс обнаружения является грубым. Предполагается, что каждый файл, который вы открываете с помощью Vim, будет Latin-1, если только он не обнаружит метку порядка байтов в Юникоде вверху. Файл UTF-8 без метки порядка байтов будет трудно редактировать, поскольку любые многобайтовые символы будут отображаться в буфере как последовательности символов, а не как отдельные символы.
Хуже того, Vim по умолчанию использует Latin-1 для представления текста в буфере. Таким образом, файл UTF-8 с меткой порядка байтов будет поврежден при преобразовании в Latin-1.
Решение состоит в том, чтобы настроить Vim для внутреннего использования UTF-8. Фактически это рекомендуется в документации Vim, и единственная причина, по которой он не настроен таким образом, - избегать путаницы среди пользователей, которые ожидают, что Vim будет работать в основном как редактор Latin-1.
В вашем .vimrc
, добавьте set encoding=utf-8
и перезапустите Vim.
Или вместо этого установите LANG
переменную окружения, чтобы указать, что UTF-8 является вашей предпочтительной кодировкой символов. Это повлияет не только на Vim, но и на любое программное обеспечение, которое LANG
определяет, как оно должно представлять текст. Например, чтобы указать, что текст должен отображаться на английском языке ( en
), как говорят в Соединенных Штатах ( US
), в кодировке UTF-8 ( utf-8
), установите LANG=en_US.utf-8
.
Теперь Vim будет использовать UTF-8 для представления текста в буфере. Кроме того, он также предпримет более решительные усилия для обнаружения кодировки UTF-8 в файле. Помимо поиска метки порядка байтов, он также проверит UTF-8 без метки порядка байтов, прежде чем вернуться к Latin-1. Таким образом, он больше не будет повреждать файл, закодированный в UTF-8, и должен правильно отображать символы UTF-8 во время сеанса редактирования.
Для получения дополнительной информации о том , как Вим определяет кодировку файла см в
fileencodings
опцию в документации Vim .
Для получения дополнительной информации о настройке кодировки , что Вим использует внутренне, см в encoding
опции .
Если вам необходимо изменить кодировку , используемую при записи файла на диск, см в fileencoding
опции .
.vimrc
; фактически значение кодировки по умолчанию - "latin1" или значение из $ LANG, которое в моей системе установлено вen_US.UTF-8
. По этой причине:set encoding
выдаетencoding=utf-8
из коробки. Как и ожидалось, если LANG не установлен,:set encoding
выдаетencoding=latin1
. Спасибо за отличный ответ!