Vim Tips Wiki

Reload the same file in different encoding

Redirected from VimTip1195

1,624pages on
this wiki
Add New Page
Talk0 Share
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
  let choice = inputlist(prompt_encs)
  if choice >= 0 && choice < len(encodings)
    execute 'e ++enc='.encodings[choice].' %:p'
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
	  let g:enc_index = g:enc_index + 1
nmap <F8> :call ChangeFileencoding()<CR>

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

You can also configure Vim to set file encoding automatically from a modeline, which doesn't work as intended by default because the modeline takes effect after the file is read into memory, or you can install a plugin like AutoFenc to automatically detect the encoding in more situations.

See alsoEdit


Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on Fandom

Random Wiki