Vim Tips Wiki
(minor cleaning for standard format)
No edit summary
Line 29: Line 29:
 
if choice >= 0 && choice < len(encodings)
 
if choice >= 0 && choice < len(encodings)
 
execute 'e ++enc='.encodings[choice].' %:p'
 
execute 'e ++enc='.encodings[choice].' %:p'
  +
endif
  +
endf
  +
nmap <F8> :call ChangeFileencoding()<CR>
  +
</pre>
  +
  +
Here is a version of this function which wraps the encodings instead of prompting the user:
  +
<pre>
  +
let g:enc_index = 0
  +
function! ChangeFileencoding()
  +
let encodings = ['cp1251', 'koi8-u', 'cp866']
  +
execute 'e ++enc='.encodings[g:enc_index].' %:p'
  +
if g:enc_index >=2
  +
let g:enc_index = 0
  +
else
  +
let g:enc_index = g:enc_index + 1
 
endif
 
endif
 
endf
 
endf

Revision as of 06:51, 7 September 2012

Tip 1195 Printable Monobook Previous Next

created 2006 · complexity basic · author Anatoli Sakhnik · version 6.0


I often need to edit files with different encodings, which can't be detected automatically (for example, how distinguish between cp866 and cp1251?). So when the desired file was loaded with a wrong encoding, I used to type:

:e ++enc=<what_was_really_needed> %:p

The following function makes it easier:

function! ChangeFileencoding()
  let encodings = ['cp1251', 'koi8-u', 'cp866']
  let prompt_encs = []
  let index = 0
  while index < len(encodings)
    call add(prompt_encs, index.'. '.encodings[index])
    let index = index + 1
  endwhile
  let choice = inputlist(prompt_encs)
  if choice >= 0 && choice < len(encodings)
    execute 'e ++enc='.encodings[choice].' %:p'
  endif
endf
nmap <F8> :call ChangeFileencoding()<CR>

Here is a version of this function which wraps the encodings instead of prompting the user:

let g:enc_index = 0
function! ChangeFileencoding()
  let encodings = ['cp1251', 'koi8-u', 'cp866']
  execute 'e ++enc='.encodings[g:enc_index].' %:p'
  if g:enc_index >=2
	  let g:enc_index = 0
  else
	  let g:enc_index = g:enc_index + 1
  endif
endf
nmap <F8> :call ChangeFileencoding()<CR>

Further, it can be improved by populating the list of encodings from &fileencodings.

You can also set file encoding automatically from a modeline.

Comments

Also see Reloading a file using a different encoding.