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