Тут насправді все просто. Зберігайте всі тексти в 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», який відповідає за кодування термінала, але в більшості випадків вам не доведеться його налаштовувати.
