egorius: (Default)
[personal profile] egorius

Наступил на очередные vim-грабельки, на этот раз с кодировкой. Вообще-то, всё сделано логично. Есть три кодировки:

  • termencoding — в какой кодировке выводить символы на терминал,
  • encoding — в какой кодировке текст хранится внутри vimа,
  • fileencoding — в какой кодировке записан редактируемый файл.

Если какие-то кодировки не совпадают, на лету происходит преобразование. Как правило, нет нужды трогать ничего, кроме кодировки файла. Если её поменять на ходу (:e ++enc=iso-8859-5), на экране нарисуется перекодированный текст. Отлично.

Однако же на практике vim упорно отказывался правильно показывать исошный файл, радостно сообщая в строке состояния «NOT converted». Хотя некоторые файлы в некоторых кодировках всё-таки отображались.

Сломав всю голову, пошёл гуглить и выяснил, что такое сообщение вылезает, если преобразование невозможно. Как интересно. Беглый просмотр хелпа показал, что для перекодирования используется iconv. Посмотрел man iconv, попробовал перекодировать им файл — всё отлично работает. Ну не шайтан ли?

И только со второго захода нашёл в хелпе, что виндовые версии vimа могут быть скомпилированы с некой фичей +iconv/dyn, которая заставляет vim искать iconv в соответствующей dll-ке. Причём если таковой нет, то Vim will still work but some conversions won’t be possible.

Dll, естественно, отсутствовала. И стоило её найти и подсунуть vimу, как наступило счастье.

Внимание, вопрос: что заставило людей, собиравших дистрибутив vimа, не включить в него iconv? Всё, как обычно в unix: очень круто, но полдня вынь да убей.

If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

egorius: (Default)
egorius

July 2025

M T W T F S S
  12 3 4 5 6
78910111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 8th, 2025 04:18 pm
Powered by Dreamwidth Studios