Vim и кодировки

Тут на самом деле всё просто. Храните все тексты в 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', которая отвечает за кодировку терминала, но в большинстве случаев вам не придется её настраивать.

Источник
  • +1
  • 12 октября 2009, 17:59
  • Sergei_T

Комментарии (6)

RSS свернуть / развернуть
+
0
А можно так:

iconv --from-code=KOI-8 --to-code=CP1251 -o bar.txt foo.txt

Ты, кстати, не знаешь как в Vim ^M убрать? Ну, переводы строки, которые из виндовых файлов приходят? Чтобы не \r\n, а просто \n было?
avatar

yababay

  • 13 октября 2009, 02:08
+
0
не думал даже об этом
iconv почему-то на некоторых файлах обламывается кривых —
видать какие-то в них спец символы проскакивают
avatar

Sergei_T

  • 13 октября 2009, 09:07
+
0
dos2unix команда есть в некоторых дистрибутивах
avatar

Sergei_T

  • 18 июня 2010, 17:39
+
0
Вот, нашел случайно:

$ :set ff=unix

— это чтобы убрать из текста ^M, т.е. превратить \r\n прлосто в \n.

$ :set ff=dos

— в обратную сторону.
avatar

yababay

  • 24 июля 2010, 11:36
+
0
Я за определенный период времени написал себе приблуды на разные
случаи жизни (под ДОС-Виндос). Страшненькие такие… Но Работает.
avatar

Markony

  • 20 июня 2010, 07:31
+
0
приблуды это круто
avatar

FREExLOADER

  • 25 июля 2010, 17:36

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.