Definir codificação e codificação de arquivo para utf-8 no Vim

95

Qual é a diferença entre esses dois comandos?

  • set encoding=utf-8
  • set fileencoding=utf-8

Preciso definir os dois quando quiser usar o utf-8?

Além disso, preciso definir a codificação de arquivo com setou setglobal?

Kiraly Zoltan
fonte
Observe que é mais seguro definir a codificação em LOCALE em vez de forçá-la no Vim, caso você edite um arquivo não Unicode. Você obterá o mesmo resultado, pois o padrão é LOCALE e você não confundirá nenhum caractere estrangeiro se encontrado.
timss

Respostas:

89

TL; DR

No primeiro caso com set encoding=utf-8, você mudará a codificação de saída que é mostrada no terminal.

No segundo caso com set fileencoding=utf-8, você alterará a codificação de saída do arquivo que está escrito .

Conforme declarado por @Dennis, você pode definir ambos em seu ~ / .vimrc se sempre quiser trabalhar em utf-8.

Mais detalhes

Do wiki do VIM sobre como trabalhar com Unicode

" encodingdefine como o vim deve representar os caracteres internamente . Utf-8 é necessário para a maioria dos sabores de Unicode."

" fileencodingdefine a codificação para um arquivo específico (local para buffer);: setglobal define o valor padrão. Um valor vazio também pode ser usado: o padrão é o mesmo de 'codificação'. Ou você pode definir uma das codificações ucs, Isso pode tornar o mesmo arquivo de disco maior ou menor, dependendo de sua combinação particular de caracteres. Além disso, IIUC, utf-8 é sempre big-endian (high bit primeiro), enquanto ucs pode ser big-endian ou little-endian, então se você usá-lo, você provavelmente precisará definir 'bomba "(veja abaixo)."

Adrien Lacroix
fonte
3
Desculpe, não entendo. O que o fileencoding faz mais exatamente?
Kiraly Zoltan
25
No primeiro caso, você mudará a codificação de saída que é mostrada no terminal. No segundo caso, você alterará a codificação de saída do arquivo que está escrito.
Adrien Lacroix
1
+1 Para uma resposta curta e doce, em vez de apenas repetir a documentação oficial! :)
425 nsp
Se necessário, ad-hoc diretamente da linha de comando vim -c "set encoding=utf-8" file.ext.
Hans Ginzel
87
set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

Você também pode definir ambos em seu ~/.vimrcse quiser sempre trabalhar com utf-8.

Dennis
fonte
0

Você pode definir a variável 'fileencodings' em seu .vimrc.

Esta é uma lista de codificações de caracteres consideradas ao começar a editar um arquivo existente. Quando um arquivo é lido, o Vim tenta usar a primeira codificação de caracteres mencionada. Se um erro for detectado, o próximo na lista é tentado. Quando uma codificação que funciona é encontrada, 'fileencoding' é definido para ela. Se tudo falhar, 'fileencoding' é definido como uma string vazia, o que significa que o valor de 'encoding' é usado.

Vejo :help filencodings

Se você costuma trabalhar com, por exemplo, cp1252, pode adicioná-lo lá:

set fileencodings=ucs-bom,utf-8,cp1252,default,latin9
Mike11
fonte