Reload the same file in different encoding
Talk0this wiki
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 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 also
Edit
- Detect encoding from the charset specified in HTML files
- Reloading a file using a different encoding