May. 13th, 2009

egorius: (Default)

Наступил на очередные 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: очень круто, но полдня вынь да убей.

Profile

egorius: (Default)
egorius

March 2025

M T W T F S S
      1 2
34 567 89
1011 121314 1516
17181920212223
24252627 28 29 30
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 30th, 2025 02:50 am
Powered by Dreamwidth Studios