Pull to refresh

Кодировки

Reading time 2 min
Views 38K
Тут на самом деле всё просто. Храните все тексты в 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', которая отвечает за кодировку терминала, но в большинстве случаев вам не придется её настраивать.
Tags:
Hubs:
+12
Comments 17
Comments Comments 17

Articles