Коли Vim читає наявний файл, він намагається виявити кодування файлу. Виписуючи файл, Vim використовує кодування файлу, який він виявив (за винятком випадків, коли ви розповідаєте інакше). Отже, файл, виявлений як UTF-8, пишеться як UTF-8, файл, виявлений як Latin-1, пишеться як Latin-1, і так далі.
За замовчуванням процес виявлення є неочищеним. Кожен файл, який ви відкриєте за допомогою Vim, вважатиметься латинським-1, якщо він не виявить позначку порядку байтів Unicode вгорі. Файл UTF-8 без позначки порядку байту буде важко відредагувати, оскільки будь-які багатобайтові символи будуть показані в буфері як послідовності символів замість окремих символів.
Гірше, що Vim за замовчуванням використовує латинську-1 для подання тексту в буфері. Таким чином, файл UTF-8 із позначкою порядку байтів буде пошкоджений переходом вниз до латиниці-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 без позначки порядку байтів, перш ніж повернутися до латинської-1. Таким чином, він більше не пошкоджуватиме файл, закодований у UTF-8, і він повинен належним чином відображати символи UTF-8 під час сеансу редагування.
Для отримання додаткової інформації про те, як Vim виявляє кодування файлів, див .
fileencodings
Параметр у документації Vim .
Для отримання додаткової інформації про налаштування кодування, яке Vim використовує внутрішньо, див . encoding
Параметр .
Якщо вам потрібно змінити кодування, яке використовується під час запису файлу на диск, див . fileencoding
Параметр .
.vimrc
; насправді значенням кодування за замовчуванням є "latin1" або значення від $ LANG, яке встановлено в моїй системіen_US.UTF-8
. З цієї причини:set encoding
видаєencoding=utf-8
з коробки. Як і очікувалося, якщо LANG не налаштовано,:set encoding
даєencoding=latin1
. Дякую за чудову відповідь!