Автоопределение кодировки в vim
У меня много текстовых файлов с русским текстом в разных кодировках. Какие-то остались с времен MS-DOS, какие-то взяты с примонтированных разделов Windows, а какие-то созданы и редактируются только под Linux-ом. Соответственно, зоопарк кодировок (866, 1251, koi8-r, utf-8) всем знаком. Очень удобно обучить vim автоматически подставлять используемую в файле кодировку (определенную автоматически, не переключая ее вручную кажый раз). Есть такая утилита - enca (и enconv), которая пытается распознать кодировку файла (и в большинстве случаев делает это успешно). Ей и воспользуемся... в файле ~/.vimrc:
function SetEncoding(f)
let e = system('enca -Pe "' . a:f . '"')
let e = substitute(e, '/.*', '', '')
if e =~ 'unknown' || e =~ 'ASCII' || e =~ 'enca' || e =~ 'TeX'
execute("set encoding=koi8-r")
execute("set fileencodings=koi8-r,cp1251,cp866,utf-8,ucs-bom,ascii")
else
execute("set encoding=" . e)
execute("set fileencodings=" . e)
endif
endfunctionsource $VIMRUNTIME/menu.vim menu Options.Encoding.koi8-r :e ++enc=koi8-r<CR>;:set encoding=koi8-r<CR>:set fileencodings=koi8-r<CR>; menu Options.Encoding.cp1251 :e ++enc=cp1251<CR>:set encoding=cp1251<CR>:set fileencodings=cp1251<CR> menu Options.Encoding.cp866 :e ++enc=cp866<CR>:set encoding=cp866<CR>:set fileencodings=cp866<CR> menu Options.Encoding.utf-8 :e ++enc=utf-8<CR>:set encoding=utf-8<CR>:set fileencodings=utf-8<CR> menu Options.Encoding.ucs-bom :e ++enc=ucs-bom<CR>:set encoding=ucs-bom<CR>:set fileencodings=ucs-bom<CR>
if executable("enca")
autocmd BufReadPre * call SetEncoding(expand('<afile>'))
endifУдобно еще выставить показ текущей кодировки в строке статуса:
set statusline=%F\ (%Y,%{&encoding},%{&ff})%=%m%R\ %3p%%,\ %L\ lines,\ 0x%2B,\ (%l:%c)- 5710 просмотров

Я не использую автоматическое определение кодировки файла, но у меня есть менюшка с выбором кодировки:
И отображение кодировки в статусе + формат конца строки:
set statusline+=%{&encoding}, set statusline+=%{&fileformat}]Одно другому не мешает Ж:-) У меня тоже подобное есть. Полезно для перекодирования. Хотя я сейчас для перекодирования просто меняю fenc и сохраняю. При сохраниении автоматом перекодирует:
Ещё хорошо бы добавить в параметры enca: "-L russian", не у всех же русский язык по умолчанию.
а ты реально используешь с этим флажком?
если да и все нормально - я подправлю
Вот еще вариант отсюда http://trific.ath.cx/software/enca/misc/
function GetEncoding(f) let e = system('enca -Pe "' . a:f . '"') let e = substitute(e, '/.*', '', '') if e =~ 'unknown' return 'ascii' endif return e endfunc if executable("enca") au BufReadPre * exec "set fencs=" . GetEncoding(expand('<afile>')) endif--
Signature invent in progress 24% ##........
if executable("enca")
..
endif
подправил спасибо Ж:-)
--
Signature invent in progress 23% #.........
Отправить комментарий