Глюк кодировки. (неужели вим не всемогущ?)

и другие vi-подобные редакторы

Модератор: /dev/random

Ответить
Аватара пользователя
jojahti
Сообщения: 310

Глюк кодировки.

Сообщение jojahti »

Есть некоторый файл на русском языке. В огненной лисичке он совершенно корректнейшим образом открывается в кодировке CP-866.

А в виме я ставлю set encoding=cp866. И получаю вместо русских букв крякозябры. Что я делаю не так?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: Глюк кодировки.

Сообщение /dev/random »

jojahti писал(а):
11.05.2010 21:08
А в виме я ставлю set encoding=cp866. И получаю вместо русских букв крякозябры. Что я делаю не так?

Никакого "set encoding".
:e ++enc=cp866 имяфайла
Спасибо сказали:
Аватара пользователя
jojahti
Сообщения: 310

Re: Глюк кодировки.

Сообщение jojahti »

О работает.

Чёрд. Что такое e?

И почему set encoding не работает?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: Глюк кодировки.

Сообщение /dev/random »

jojahti писал(а):
11.05.2010 21:26
Чёрд. Что такое e?

Открытие файла.

jojahti писал(а):
11.05.2010 21:26
И почему set encoding не работает?

set encoding устанавливает кодировку вима, а не файла.
Спасибо сказали:
Аватара пользователя
jojahti
Сообщения: 310

Re: Глюк кодировки.

Сообщение jojahti »

Мну не понимать. :)

Я сам лично сабы нормально отображал через set encoding а потом сохранял в нужной кодировке через set fileencoding.
Почему у меня таким макаром срабатывало?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Глюк кодировки.

Сообщение sash-kan »

encoding — это внутреннее представление. его лучше не трогать. разве что на период действия одной команды (то самое ++enc)
termencoding — это для терминала
fileencoding — это в какой кодировке будет сохранён текущий буфер
fileencodings — это список кодировок, которые vim будет последовательно перебирать при открытии файла

примерно так. читайте :h <команда>
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Глюк кодировки.

Сообщение sash-kan »

вот примерно стандартное содержимое fileencodings:

Код: Выделить всё

:set fileencodings
  fileencodings=ucs-bom,utf-8,default,latin1

если добавить cp1251, допустим, в конец:

Код: Выделить всё

:set fileencodings=ucs-bom,utf-8,default,latin1,cp1251
и после этого открыть файл в кодировке cp1251, он отобразится некорректно. взглянув на текущее содержимое fileencoding видим, что была использована кодировка latin1. она первая из списка не дала ошибки при перекодировании.
а вот если поставить cp1251 в начало:

Код: Выделить всё

:set fileencodings=cp1251,ucs-bom,utf-8,default,latin1
то при открытии того же файла он будет корректно перекодирован.
и переменной fileencoding будет присвоено корректное значение: cp1251.
следовательно, и записан файл будет корректно. именно в cp1251.

но чтобы вот так не извращаться, проще сразу открывать файл, подставив временно (на время действия команды :e) внутреннюю кодировку cp1251:

Код: Выделить всё

:e ++enc=cp1251 <файл>
или, если файл уже в буфере, то можно имя файла не указывать:

Код: Выделить всё

:e ++enc=cp1251
он просто будет заново считан с диска в текущий буфер.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: Глюк кодировки.

Сообщение /dev/random »

sash-kan писал(а):
12.05.2010 00:03
а вот если поставить cp1251 в начало:

Код: Выделить всё

:set fileencodings=cp1251,ucs-bom,utf-8,default,latin1
то при открытии того же файла он будет корректно перекодирован.

Лучше не в начало, а после utf-8.
Спасибо сказали:
Goner
Сообщения: 153

Re: Глюк кодировки.

Сообщение Goner »

Да, еще один tip от sash-kan:
:e ++ и стрелки = получаем ранее использовавшиеся кодировки. Довольно удобно.
Спасибо сказали:
Аватара пользователя
jojahti
Сообщения: 310

Re: Глюк кодировки.

Сообщение jojahti »

sash-kan
Круто. :clap3: Вопросов больше нет. "Надо это в тонкости настройки" добавить.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Глюк кодировки.

Сообщение drBatty »

открыл файл в UTF - всё нормально, открыл таб и в нём файл в KOI8-R - нормально, но в первом табе стали кракозябры. Есть-ли простое решение? Что-бы в каждом табе своя кодировка?

PS: :e ++enc=koi8-r file_name
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Глюк кодировки.

Сообщение sash-kan »

drBatty писал(а):
01.06.2010 03:53
Что-бы в каждом табе своя кодировка?
так и есть. у вас что-то неправильное происходит.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Глюк кодировки.

Сообщение diesel »

Goner писал(а):
12.05.2010 00:13
Да, еще один tip от sash-kan:
:e ++ и стрелки = получаем ранее использовавшиеся кодировки. Довольно удобно.

лучше уж менюшкой воспользоваться:

Код: Выделить всё

" менюшка для выбора кодировок
menu VVspell.enable_ru          :setlocal spell spelllang=ru<CR>
menu VVspell.enable_en          :setlocal spell spelllang=en<CR>
menu VVspell.enable_enru        :setlocal spell spelllang=en,ru<CR>
menu Encoding.koi8-r            :e ++enc=koi8-r<CR>
menu Encoding.windows-1251      :e ++enc=cp1251<CR>
menu Encoding.ibm-866           :e ++enc=ibm866<CR>
menu Encoding.utf-8             :e ++enc=utf-8<CR>
menu Encoding.SpellMenu         :emenu VVspell.<TAB>
map <F8> :emenu Encoding.<TAB>

Спасибо сказали:
Ответить