Из вопросов с комментариями, даже несмотря на то, что вопрос гласит «кодировка установлена в utf-8», похоже, что кодировка Vim НЕ установлена в utf-8. Это все еще латиница 1 (ISO-8859-1). Это означает, что Vim не знает, как представлять эти специальные символы в памяти и сохранять их в файл.
Чтобы Vim правильно писал "специальные" символы, ему нужно 2 вещи:
- Параметр «кодировка», который может представлять этот символ в памяти, обычно utf-8
- Пустое значение или параметр, который может представлять этот символ на диске для «fileencoding». Обычно это также utf-8 или пустой.
Чтобы правильно прочитать файл, содержащий эти символы, Vim снова нуждается в этих двух вещах. Vim может автоматически определить правильное значение для fileencodings, если ваш параметр fileencodings установлен правильно.
'fileencodings' - это список через запятую, который указывает Vim (по порядку), какие кодировки попробовать. "ucs-bom", как в комментариях к вашему вопросу, обнаружит юникод, но только если есть спецификация (метка порядка байтов). Кроме того, поскольку кодировка вашего Vim по-прежнему "latin1", это не принесет вам никакой пользы, если Vim DID обнаружит Unicode.
Обратите внимание, что 'кодировка' и 'fileencodings' должны находиться очень близко к вершине вашего .vimrc, до ЛЮБОГО отображения, меню, строковых опций или настроек регистра. В противном случае Vim неверно истолковывает существующий текст в этих областях.
Для получения дополнительной информации см. Справку по каждому из этих параметров и страницу вики по настройке Vim для Unicode .
Если Vim не определяет кодировку для некоторых файлов должным образом даже с правильными настройками, вы можете:
- Установите его вручную, например
:e ++enc=utf-8 myfile.txt
- Установите плагин Vim, который будет автоматически определять кодировку файлов