Como posso usar o vim para converter meu arquivo para utf8?

Respostas:

179

Se você estiver editando um arquivo codificado como latin1, verá que 'fileencoding' para aquele buffer está definido como latin1. Portanto, você precisará definir manualmente a codificação do arquivo antes de salvá-lo.

:set fileencoding=utf8
:w myfilename

Observe também que os arquivos UTF8 geralmente começam com uma Marca de Ordem de Byte (BOM), que indica endianness. O BOM é opcional, mas alguns programas o utilizam exclusivamente para determinar a codificação do arquivo. Sob certas condições, o Vim escreverá o BOM, mas às vezes não. Para definir explicitamente o BOM, faça o seguinte:

:set bomb

Para mais informações :help mbyte-optionse :help utf8e :help bomb.

Eric Johnson
fonte
As instruções funcionam bem, mas: 1) utf-8 não tem endianness (como vim help explica , o BOM utf-8 apenas indica que o arquivo é utf-8); 2) Quando você abrir o arquivo novamente mais tarde, precisará tê set fileencoding=utf-8-lo novamente com antecedência. O Vim nem percebe o BOM se você lhe diz para escrever um (e ele realmente escreve). Para fazer o utf-8 funcionar, você precisa disso ou set encoding=utf-8nas configurações de inicialização. Pelo menos, essa é a história do meu sistema.
Stein
35
:w ++enc=utf-8 %

para gravar o arquivo na codificação utf-8 no disco.

Michael Krelin - hacker
fonte
5
Embora isso esteja correto, sua resposta não deveria ter coletado tantos votos positivos em comparação com a de Eric Johnson. A razão é que, se você não definir fileencoding, o :w ++enc=utf-8é válido uma vez, mas na próxima vez que você executar :w, o valor de 'fileencoding'será usado, e se você não o alterou (explicitamente durante a edição ou recarregando o arquivo, esperando que 'fencs'está definido apropriadamente e a codificação real é bem detectada), a codificação antiga voltará.
Benoit
1
@ MichaelKrelin-hacker, a mudança fileencodingtambém é uma resposta válida à pergunta, o que não leva IMO a tomar maus hábitos. Mas tudo bem, isso é apenas uma questão de humor, suponho.
Benoit
3
@Benoit, não insinuei que a resposta de Eric não é válida! Se eu acho algo estranho em sua resposta, não é o conteúdo, mas por que ele
postou
3
@Michael Krelin - hacker: verifique o FAQ. Na verdade, é encorajado a responder sua própria pergunta. É o ponto principal de uma página de perguntas e respostas como esta. Não importa quem responde.
0xC0000022L
2
@ 0xC0000022L, da última vez que verifiquei (não verifiquei agora), havia algo sobre chegar a uma solução depois de fazer a pesquisa, não sobre postar pergunta e resposta em um minuto . Dito isso, eu estava apenas falando sobre o que há de estranho em sua resposta, não o que a torna inválida ou algo assim.
Michael Krelin - hacker