[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