Кодування

Кодування

Тут насправді все просто. Зберігайте всі тексти в Unicode і буде вам щастя (за умови правильно встановленої «encoding» звичайно;) В іншому випадку (у вас купа текстів у національних кодуваннях) доведеться дочитати топік до кінця:)


За кодування у Vim відповідають такі параметри:

'encoding'- кодування, в якому Vim зберігає всі дані. Тобто текст буфферів, рядки у виразах, вміст регістрів тощо. Типово, це або «latin1» або щось, що відповідає змінній середовища $ LANG. Якщо ви не користуєтеся такою штукою, як langmap, настійно рекомендується встановити'encoding'в «utf-8». Це дозволить редагувати будь-які тексти, в тому числі і збережені в одному з Unicode кодувань без втрат.

'fileencoding'- кодування файла у поточному буфері. Вона або визначається автоматично (для цього використовується параметр «fileencodings», про неї нижче), або задається явно при відкритті файла за допомогою модифікатора++ enc. Наприклад, щоб відкрити файл foo.txt у кодуванні KOI8-R потрібно написати

:e ++enc=koi8-r foo.txt

і натиснути Enter. А тепер увага, тонкий момент. Якщо ви відкриєте файл без модифікатора++ enc, «fileencoding» буде встановлено Vim'ом в те, що він вважатиме за потрібне. Наприклад, він може неправильно визначити кодування і встановити «fileencoding» в «latin1». Якщо ви після цього напишете

:set fileencoding=koi8-r

Vim не перевідкриє файл у цьому кодуванні, він перекодує його з поточної в KOI8-R! Щоб відкрити файл у правильному кодуванні, вам слід використовувати++ enc. А ось якщо ви хочете зберегти файл у кодуванні, відмінному від того, в якому він записаний - змінюйте опцію «fileencoding». Наприклад, у вас є файл foo.txt в кодуванні KOI8-R, а ви хочете зберегти його в CP-1251. Для цього, ви відкриваєте його

:e ++enc=koi8-r foo.txt

змінюєте кодування

:set fileencoding=cp-1251

і зберігаєте

:w

Останні дві дії можна об'єднати в одне застосувавши відомий нам модифікатор++ enc ось так

:w ++enc=cp-1251

«fileencodings» - це список кодувань, які Vim буде перебирати при відкритті файла. Про імена кодувань читати в:help encoding-names.

Є ще параметр «termencoding», який відповідає за кодування термінала, але в більшості випадків вам не доведеться його налаштовувати.