Порой требуется быстро подправить пару строк русского текста в файле на сервере, но из-за разных кодировок возникают проблемы.

Для таких случаев я использую специальный конфиг для консольного редактора 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