Wikia

Vim Tips Wiki

Changes: Reload the same file in different encoding

Edit

Back to page

(link to AutoFenc and other tips, plus mention that the modeline doesn't work by default in case that is not clear)
 
Line 51: Line 51:
 
Further, it can be improved by populating the list of encodings from &fileencodings.
 
Further, it can be improved by populating the list of encodings from &fileencodings.
   
You can also [[VimTip911|set file encoding automatically from a modeline]].
+
You can also configure Vim to [[VimTip911|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 {{script|id=2721|text=AutoFenc}} to automatically detect the encoding in more situations.
   
==Comments==
+
==See also==
Also see [[VimTip690|Reloading a file using a different encoding]].
+
* [[Detect encoding from the charset specified in HTML files]]
  +
* [[VimTip690|Reloading a file using a different encoding]]
   
----
+
==Comments==

Latest revision as of 19:42, September 11, 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 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

CommentsEdit

Around Wikia's network

Random Wiki