[Moscow.pm] Указание кодировки файла
Shrub Alexey
ashrub на agava.com
Пт Сен 5 03:26:17 PDT 2008
Я удивлён. Я понимаю тестеры, саппорты любят кнопки наживать, но у
программистов обычно лень берёт верх, один раз указали кодировку в
файле, а потом открываем и работаем и не надо ничего нажимать
И раз про vim столько разговоров, то он это умеет, только формат
указания кодировки у него свой, если бы он понимал формат о котором я
говорил, то можно было бы со спокойной совестью во всех файлах прописать
так кодировку и забыть о переключениях
Павел Тимонин wrote:
> это лишнее действие в виме биндится на одну кнопку. если надо ниже
> приведу как это делается.
> кроме того это же добавляется в меню. и это тоже приведу.
> и у вима есть способ автоматического определения кодировки. и это приведу.
> а ещё если он автоматически определяет то обычно не видно, какая же у
> файла кодировка. чтобы вим это показал надо настроить немного
> статус-строку.. ну я так сделал.
>
> итак, код.
> это должно быть в файле .vimrc в домашней директории (*nix) или
> (кажется) в файле _vimrc в папке, куда установлен вим в винде.
>
> " <F7> File fileformat (dos - <CR> <NL>, unix - <NL>, mac - <CR>)
> map <F7> :execute RotateFileFormat()<CR>
> vmap <F7> <C-C><F7>
> imap <F7> <C-O><F7>
> let b:fformatindex=0
> function! RotateFileFormat()
> let y = -1
> while y == -1
> let encstring = "#unix#dos#mac#"
> let x = match(encstring,"#",b:fformatindex)
> let y = match(encstring,"#",x+1)
> let b:fformatindex = x+1
> if y == -1
> let b:fformatindex = 0
> else
> let str = strpart(encstring,x+1,y-x-1)
> return ":set fileformat=".str
> endif
> endwhile
> endfunction
>
> " <F8> изменение открываемой кодировки на лету
> " ucs-2le - MS Windows unicode encoding
> map <F8> :execute RotateEnc()<CR>
> vmap <F8> <C-C><F8>
> imap <F8> <C-O><F8>
> let b:encindex=0
> function! RotateEnc()
> let y = -1
> while y == -1
> let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#"
> let x = match(encstring,"#",b:encindex)
> let y = match(encstring,"#",x+1)
> let b:encindex = x+1
> if y == -1
> let b:encindex = 0
> else
> let str = strpart(encstring,x+1,y-x-1)
> return ":e ++enc=".str
> endif
> endwhile
> endfunction
>
> " <Shift+F8> переоткрытие файла в другой кодировке (encoding = fileencoding)
> map <S-F8> :execute ForceRotateEnc()<CR>
> vmap <S-F8> <C-C><S-F8>
> imap <S-F8> <C-O><S-F8>
> let b:encindex=0
> function! ForceRotateEnc()
> let y = -1
> while y == -1
> let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#"
> let x = match(encstring,"#",b:encindex)
> let y = match(encstring,"#",x+1)
> let b:encindex = x+1
> if y == -1
> let b:encindex = 0
> else
> let str = strpart(encstring,x+1,y-x-1)
> :execute "set encoding=".str
> return ":e ++enc=".str
> endif
> endwhile
> endfunction
>
> " <Ctrl+F8> изменение кодировки для сохранения файла
> map <C-F8> :execute RotateFEnc()<CR>
> vmap <C-F8> <C-C><C-F8>
> imap <C-F8> <C-O><C-F8>
> let b:fencindex=0
> function! RotateFEnc()
> let y = -1
> while y == -1
> let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#"
> let x = match(encstring,"#",b:fencindex)
> let y = match(encstring,"#",x+1)
> let b:fencindex = x+1
> if y == -1
> let b:fencindex = 0
> else
> let str = strpart(encstring,x+1,y-x-1)
> return ":set fenc=".str
> endif
> endwhile
> endfunction
>
> -------------------------------------------------------------------------------------
>
> " Меню выбора кодировки текста (koi8-r, cp1251, cp866, utf8)
> set wildmenu
> set wcm=<Tab>
> menu Encoding.koi8-r :e ++enc=koi8-r<CR>
> menu Encoding.windows-1251 :e ++enc=cp1251<CR>
> menu Encoding.cp866 :e ++enc=cp866<CR>
> menu Encoding.utf-8 :e ++enc=utf8 <CR>
>
> -------------------------------------------------------------------------------------
>
> set fileencodings=utf-8,cp1251,cp866,koi8-r " это список кодировок,
> которые вим будет пробовать,
> "
> открывая файл.
>
> -------------------------------------------------------------------------------------
>
> set statusline=%<%f%h%m%r%=format=%{&fileformat}\ file=%{&fileencoding}\
> enc=%{&encoding}\ %b\ 0x%B\ %l,%c%V\ %P " достаточно очевидно.
>
> извините, если слишком длинно :)
> да, от терминала и настроек будет зависеть, как работают кнопки F8 в
> сочетании с shift и ctrl.
> ещё очень полезно почитать :help по всем непонятным словам в самом виме.
>
>
> 4 сентября 2008 г. 12:49 пользователь Shrub Alexey <ashrub на agava.com
> <mailto:ashrub на agava.com>> написал:
>
>
>
> Maxim Vuets wrote:
>
> 04.09.08, Shrub Alexey<ashrub на agava.com
> <mailto:ashrub на agava.com>> написал(а):
>
> Осталось пропатчить vim и получим унифицированный формат
> указания
> кодировки файла
>
>
> Там ведь свой синтаксис для переопределения параметров буффера,
> вряд ли такой патч будет принят.
>
>
> Это и плохо, что у всех свой синтаксис
>
>
>
> Надоедает в терминале переключаться, думаю это правильно
> указывать везде
> кодировку
>
>
> А зачем переключать что-то в эмуляторе терминала?
> Ведь сам редактор умеет перекодировать файл. В лучшем
> случае -- автоматически.
>
>
> Если кодировка в файле указана, то переключать ничего не нужно, а
> если нет, то где-то переключать придёться, а это лишнее действие
>
>
> --
> Шруб Алексей
> Технический руководитель проектов
> icq: 345894734
> http://www.agava.ru/
> --
> Moscow.pm mailing list
> moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org
>
>
>
> ------------------------------------------------------------------------
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
--
Шруб Алексей
Технический руководитель проектов
icq: 345894734
http://www.agava.ru/
Подробная информация о списке рассылки Moscow-pm