<div dir="ltr">это лишнее действие в виме биндится на одну кнопку. если надо ниже приведу как это делается.<br>кроме того это же добавляется в меню. и это тоже приведу.<br>и у вима есть способ автоматического определения кодировки. и это приведу.<br>
а ещё если он автоматически определяет то обычно не видно, какая же у файла кодировка. чтобы вим это показал надо настроить немного статус-строку.. ну я так сделал.<br><br>итак, код.<br>это должно быть в файле .vimrc в домашней директории (*nix) или (кажется) в файле _vimrc в папке, куда установлен вим в винде.<br>
<br>&quot; &lt;F7&gt; File fileformat (dos - &lt;CR&gt; &lt;NL&gt;, unix - &lt;NL&gt;, mac - &lt;CR&gt;)<br>map &lt;F7&gt;&nbsp;&nbsp;&nbsp; :execute RotateFileFormat()&lt;CR&gt;<br>vmap &lt;F7&gt;&nbsp;&nbsp;&nbsp; &lt;C-C&gt;&lt;F7&gt;<br>imap &lt;F7&gt;&nbsp;&nbsp;&nbsp; &lt;C-O&gt;&lt;F7&gt;<br>
let b:fformatindex=0<br>function! RotateFileFormat()<br>&nbsp;&nbsp;&nbsp; let y = -1<br>&nbsp;&nbsp;&nbsp; while y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let encstring = &quot;#unix#dos#mac#&quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let x = match(encstring,&quot;#&quot;,b:fformatindex)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let y = match(encstring,&quot;#&quot;,x+1)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:fformatindex = x+1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:fformatindex = 0<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let str = strpart(encstring,x+1,y-x-1)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return &quot;:set fileformat=&quot;.str<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; endif<br>&nbsp;&nbsp;&nbsp; endwhile<br>endfunction<br><br>&quot; &lt;F8&gt; изменение открываемой кодировки на лету<br>&quot; ucs-2le - MS Windows unicode encoding<br>map &lt;F8&gt;&nbsp;&nbsp;&nbsp; :execute RotateEnc()&lt;CR&gt;<br>vmap &lt;F8&gt;&nbsp;&nbsp;&nbsp; &lt;C-C&gt;&lt;F8&gt;<br>
imap &lt;F8&gt;&nbsp;&nbsp;&nbsp; &lt;C-O&gt;&lt;F8&gt;<br>let b:encindex=0<br>function! RotateEnc()<br>&nbsp;&nbsp;&nbsp; let y = -1<br>&nbsp;&nbsp;&nbsp; while y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let encstring = &quot;#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#&quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let x = match(encstring,&quot;#&quot;,b:encindex)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let y = match(encstring,&quot;#&quot;,x+1)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:encindex = x+1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:encindex = 0<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let str = strpart(encstring,x+1,y-x-1)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return &quot;:e ++enc=&quot;.str<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; endif<br>&nbsp;&nbsp;&nbsp; endwhile<br>endfunction<br><br>&quot; &lt;Shift+F8&gt; переоткрытие файла в другой кодировке (encoding = fileencoding)<br>map &lt;S-F8&gt;&nbsp;&nbsp;&nbsp; :execute ForceRotateEnc()&lt;CR&gt;<br>vmap &lt;S-F8&gt;&nbsp;&nbsp;&nbsp; &lt;C-C&gt;&lt;S-F8&gt;<br>
imap &lt;S-F8&gt;&nbsp;&nbsp;&nbsp; &lt;C-O&gt;&lt;S-F8&gt;<br>let b:encindex=0<br>function! ForceRotateEnc()<br>&nbsp;&nbsp;&nbsp; let y = -1<br>&nbsp;&nbsp;&nbsp; while y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let encstring = &quot;#koi8-r#cp1251#8bit-cp866#utf-8#&quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let x = match(encstring,&quot;#&quot;,b:encindex)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let y = match(encstring,&quot;#&quot;,x+1)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:encindex = x+1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:encindex = 0<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let str = strpart(encstring,x+1,y-x-1)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; :execute &quot;set encoding=&quot;.str<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return &quot;:e ++enc=&quot;.str<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; endif<br>&nbsp;&nbsp;&nbsp; endwhile<br>endfunction<br><br>&quot; &lt;Ctrl+F8&gt; изменение кодировки для сохранения файла<br>map &lt;C-F8&gt;&nbsp;&nbsp;&nbsp; :execute RotateFEnc()&lt;CR&gt;<br>
vmap &lt;C-F8&gt;&nbsp;&nbsp;&nbsp; &lt;C-C&gt;&lt;C-F8&gt;<br>imap &lt;C-F8&gt;&nbsp;&nbsp;&nbsp; &lt;C-O&gt;&lt;C-F8&gt;<br>let b:fencindex=0<br>function! RotateFEnc()<br>&nbsp;&nbsp;&nbsp; let y = -1<br>&nbsp;&nbsp;&nbsp; while y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let encstring = &quot;#koi8-r#cp1251#8bit-cp866#utf-8#&quot;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let x = match(encstring,&quot;#&quot;,b:fencindex)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let y = match(encstring,&quot;#&quot;,x+1)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:fencindex = x+1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if y == -1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let b:fencindex = 0<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; let str = strpart(encstring,x+1,y-x-1)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return &quot;:set fenc=&quot;.str<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; endif<br>&nbsp;&nbsp;&nbsp; endwhile<br>endfunction<br><br>-------------------------------------------------------------------------------------<br>
<br>&quot; Меню выбора кодировки текста (koi8-r, cp1251, cp866, utf8)<br>set wildmenu<br>set wcm=&lt;Tab&gt;<br>menu Encoding.koi8-r :e ++enc=koi8-r&lt;CR&gt;<br>menu Encoding.windows-1251 :e ++enc=cp1251&lt;CR&gt;<br>menu Encoding.cp866 :e ++enc=cp866&lt;CR&gt;<br>
menu Encoding.utf-8 :e ++enc=utf8 &lt;CR&gt;<br><br>-------------------------------------------------------------------------------------<br>
<br>set fileencodings=utf-8,cp1251,cp866,koi8-r &quot; это список кодировок, которые вим будет пробовать, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; открывая файл.<br><br>-------------------------------------------------------------------------------------<br>


<br>
set statusline=%&lt;%f%h%m%r%=format=%{&amp;fileformat}\ file=%{&amp;fileencoding}\ enc=%{&amp;encoding}\ %b\ 0x%B\ %l,%c%V\ %P &quot; достаточно очевидно.<br><br>извините, если слишком длинно :)<br>да, от терминала и настроек будет зависеть, как работают кнопки F8 в сочетании с shift и ctrl. <br>
ещё очень полезно почитать :help по всем непонятным словам в самом виме.<br><br><br><div class="gmail_quote">4 сентября 2008 г. 12:49 пользователь Shrub Alexey <span dir="ltr">&lt;<a href="mailto:ashrub@agava.com">ashrub@agava.com</a>&gt;</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&lt;<a href="mailto:ashrub@agava.com" target="_blank">ashrub@agava.com</a>&gt; написал(а):<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>