[Moscow.pm] Указание кодировки файла
Павел Тимонин
gg.error на gmail.com
Чт Сен 4 07:36:35 PDT 2008
это лишнее действие в виме биндится на одну кнопку. если надо ниже приведу
как это делается.
кроме того это же добавляется в меню. и это тоже приведу.
и у вима есть способ автоматического определения кодировки. и это приведу.
а ещё если он автоматически определяет то обычно не видно, какая же у файла
кодировка. чтобы вим это показал надо настроить немного статус-строку.. ну я
так сделал.
итак, код.
это должно быть в файле .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>написал:
>
>
> Maxim Vuets wrote:
>
>> 04.09.08, Shrub Alexey<ashrub на agava.com> написал(а):
>>
>> Осталось пропатчить vim и получим унифицированный формат указания
>>> кодировки файла
>>>
>>
>> Там ведь свой синтаксис для переопределения параметров буффера,
>> вряд ли такой патч будет принят.
>>
>
> Это и плохо, что у всех свой синтаксис
>
>
>> Надоедает в терминале переключаться, думаю это правильно указывать везде
>>> кодировку
>>>
>>
>> А зачем переключать что-то в эмуляторе терминала?
>> Ведь сам редактор умеет перекодировать файл. В лучшем
>> случае -- автоматически.
>>
>
> Если кодировка в файле указана, то переключать ничего не нужно, а если нет,
> то где-то переключать придёться, а это лишнее действие
>
> --
> Шруб Алексей
> Технический руководитель проектов
> icq: 345894734
> http://www.agava.ru/
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20080904/a5bb6d39/attachment.html>
Подробная информация о списке рассылки Moscow-pm