In english Хотелка Об авторе

Автоопределение кодировок в vim

Когда я жил в идеальном мире фриланса на европейцев и собственных проектов исключительно с UTF-8 в исходниках, я был счастлив. Запускал vim ­­- и всегда получал читаемый код с читаемыми комментариями. Никаких проблем с кодировками. И не думал даже о них.

А потом приспичило мне поработать в офисе. Где кондиционер и живые люди. И кот не отрывает каждые пять минут от работы, чтобы потребовать очередную банку консервов. И началось. Весь код здесь писался под виндой. В CP1251 и с виндовыми переводами строк. Иногда приходится исследовать или даже править скрипты клиентов – и там чаще всего то же самое. Нет, ничего плохого в виндовой кодировке нет (кроме того, что она виндовая, конечно, но из красноглазия я вроде вырос), но работать-то? Дайте ответ! Не дают. Сам нашёл. К тому же ничего сложного в чтении :help нет.

Так вот: достаточно дописать в .vimrc две строки. Одну для кодировки и одну для концов строк:

set fencs=utf8,cp1251
set ffs=dos,unix

UTF перед CP1251 – это существенно. В противном случае всё будет определяться как CP1251, и получатся более потивные кракозябры, чем раньше.

Можно ещё добавить информацию о текущей кодировке в статусную строку. У меня это сделано так (первые две строки – на самом деле одна, я разбил, чтобы она на сайдбар не налезла):

set statusline=%<%f%h%m%r%=[%{&fileformat}]
  [%{&fileencoding}]\ enc=%{&encoding}\ 0x%B\ %l,%c%V\ %P
set laststatus=2

Top

Категория: бытовуха Слова: кодировки, vim
@lj

Комментарии Отключены

ZYV

Плохого тут ещё как есть, и ничего красноглазого в этом нет. CP1251 - это плохая кодировка, заявляю со всей ответственностью. Она однобайтная и поэтому на западноевропейские символы там места после кириллических не хватило. Поэтому в одном документе не могут, например, оказаться áccèntş и русские буквы.

Задирает невыносимо. Все CP1251 немедленно изживаю в UTF-8 с Unix line endings. Благо Komodo умный.

10.09.2166 // 12:19 [ ссылка ]

Ответ от Автора

ş — это не акцент. это как-то по-другому называется, по-моему. Не помню, к сожалению. А плохого конечно есть, но пока не нужны тексты на нескольких языках — всё-таки нет.

Ну и к тому же legacy. Конвертировать все исходники (что не так страшно) + всё, что есть в базе + выискивать все места, где явно выставлена кодировка для коннектов к базе или отдаётся в Content-type юзеру (напомню: legacy)... Ну его нафиг.

Как однобайтная кодировка CP1251 не хуже других и даже лучше, например, чем КОИ (жуть жуткая и уродство уродское и уродливое). Не считая того, что к тому моменту, когда она создавалась, их был уже вагон, в том числе ISO и ГОСТ.

10.09.2815 // 12:19 [ ссылка ]

ZYV

ç и ş, обозначающие, например, звуки "ч" и "ш" в турецком, называются седилями ( [ ссылка ] ). Мне тексты постоянно требуются комбинированные, т.к. пишу на французском, и поэтому восславил тот день, когда появился UTF-8.

Самое забавное, что в NT ведь уже была заложена поддержка MBCS, почему они не стали прививать нормальную локаль - непонятно.

Про KOI-8 согласен, некоторые олд-скуильные красноглазеры до сих пор радостно показывают RH7.3 с KOI-8 локалью, надеясь на восторженную реакцию ;-)

10.09.3734 // 12:19 [ ссылка ]

Ответ от Автора

Вот, правильно! Спасибо.

В винде не стали скорее всего для совместимости. Внутри там всё юникодное с ещё с NT4.

Я сам с КОИ слез году в 2005 где-то только. Когда краснота с глаз сошла.

10.09.3978 // 12:19 [ ссылка ]