Порой требуется быстро подправить пару строк русского текста в файле на сервере, но из-за разных кодировок возникают проблемы.
Для таких случаев я использую специальный конфиг для консольного редактора vim
( gvim – gui версия для linux и windows)
который позволяет перекодировать и сохранять файлы в разных кодировках, нажатием пары клавиш:
f8 – изменение кодировки редактора ( koi8-r, cp1251, 8bit-cp866, utf-8, ucs-2le)
f7 – изменение формата файла ( dos , unix , mac )
ctrl + f8 – изменение кодировки файла ( koi8-r, cp1251, 8bit-cp866, utf-8, ucs-2le
сам конфиг ( кладем его в ~/.vimrc для текущего пользователя или в /etc/vimrc для всех пользователей):
"set encoding=utf-8 "set termencoding=utf-8 set fileencodings=utf-8,cp1251,cp866,koi8-r " File fileformat (dos - , unix - , mac - ) map :execute RotateFileFormat() vmap imap 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 " File encoding for open " ucs-2le - MS Windows unicode encoding map :execute RotateEnc() vmap imap 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 " Force file encoding for open (encoding = fileencoding) map :execute ForceRotateEnc() vmap imap let b:encindex=0 function! ForceRotateEnc() 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) :execute "set encoding=".str return ":e ++enc=".str endif endwhile endfunction " File encoding for save (convert) map :execute RotateFEnc() vmap imap let b:fencindex=0 function! RotateFEnc() let y = -1 while y == -1 let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#" 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 set statusline=%< %f%h%m%r%=format=%{&fileformat}\ file=%{&fileencoding}\ set laststatus=2
