Como visualizar caracteres UTF-8 no VIM ou Gvim

106

Eu trabalho em páginas da web que envolvem scripts em outro idioma de vez em quando, a maioria deles usa charset utf-8, VIM e Gvim não exibe caracteres UTF-8 corretamente.

Usando VIM 7.3.46 no Windows 7 de 64 bits, com set guifont=Monaco:h10em _vimrc

Existe uma maneira de corrigir isso?

Atualização: pesquisei no Google e encontrei set guifontwideatos como segunda alternativa para idiomas regionais.

Eu adicionei as seguintes linhas em _vimrc e muitos dos meus problemas foram resolvidos.

set enc=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf8,prc
set guifont=Monaco:h11
set guifontwide=NSimsun:h12

A fonte NSimsun acima funciona para chinês. O problema é que não sei como o nome da fonte funcionou com o VIM, Courier Newé mencionada, pois Courier_Newtambém NSimsunnão está em nenhum lugar do diretório de fontes. A fonte que quero usar é LathaBut, não sei como usá-la no arquivo _vimrc. set guifontwide=latha:h12ou set guifontwide=Latha:h12não funciona.

Se eu definir com sucesso o guifontwidepara latha, meu problema será resolvido. Como fazer?

Sathish Manohar
fonte
qual é o valor de 'guifont'e o valor de 'guifontwide'? Além disso, qual sistema operacional você está usando e qual versão do vim?
Benoit,
Sathish, você conseguiu encontrar alguma solução para isso? Estou tentando digitar gVim com o software eKalappai, mas o vim só está me mostrando ?? personagens (aparentemente salvando-os da mesma forma).
domingo - Reintegração de Monica em
@sundar Não. Desisti: |
Sathish Manohar
Meu problema era que o inconsolata-g não suporta os caracteres utf-8 em meu documento.
AndrewPK de
Usar set guifontwide=NSimsun:h12falha para mim, diz "Fonte ampla inválida" provavelmente o mesmo problema de não monoespaço?
Mikew

Respostas:

61

Tente recarregar o documento usando:

:e! ++enc=utf8

Se isso funcionar, talvez você deva alterar as fileencodingsconfigurações do seu .vimrc.

Benoit
fonte
2
Não muda nada para mim
Thomas Levesque
8
NÃO execute isso antes de salvar seu trabalho, pois isso apagará as alterações feitas. :uvai te salvar embora.
Além disso, isso configura o arquivo para somente leitura quando você faz isso, então você também precisa executar:set noro
Matt Vukomanovic,
2
Obrigado por isso. O Vim não estava renderizando utf-8 no meu caso porque eu tinha um bloco de dados binários (parte multipart / formulário-anexo de dados). Quando o fiz :e! ++enc=utf8, ele renderizou o utf-8, mas reclamou [ILLEGAL BYTE in line 286](a primeira linha da parte binária) dentro do arquivo. Estou supondo que o comportamento padrão é recorrer silenciosamente a alguma outra codificação quando isso acontece na abertura do Vim. Por alguma razão, porém, echo &encainda relata utf-8 nesse caso.
Dmitry Minkovsky
1
@DmitryMinkovsky, &encé a codificação que o vim usa internamente para armazenar o conteúdo do buffer. A configuração que contém a codificação para o arquivo atual é&fenc
Benoit
60

Você tentou

:set encoding=utf-8
:set fileencoding=utf-8

?

Maxim Sloyko
fonte
5
Eu tentei com essas duas configurações e ainda não consigo ver os caracteres utf-8.
Sathish Manohar,
1
-1. Na verdade, isso não pode funcionar. Nenhuma dessas opções recarregará o arquivo. O primeiro irá modificar a forma como o vim armazena buffers (e outras coisas) internamente, o segundo irá especificar que você deseja alterar a codificação de um arquivo que já está carregado em um buffer, que será aplicado ao salvá-lo.
Benoit
:set encoding=utf8 IRÁ atualizar o buffer e se o problema estiver na codificação incorreta, ele o corrigirá. Eu adicionei a set fileencoding=utf8opção para que você não encontre o erro mais confuso "Não é possível converter algum caractere" ao salvar.
Maxim Sloyko
definir codificação funcionou. Eu adicionei set encoding = utf8 ao arquivo .vimrc e agora está tudo ok com utf8.
Alexander Kim
No OSX, adicionei essas duas linhas (sem os dois pontos) ao meu ~/.vimrce funcionou bem
lionello
7

Se japoneses vierem aqui, adicione as seguintes linhas ao seu ~/.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
Kujiy
fonte
6

No Microsoft Windows, o gvim não permite que você selecione fontes não monoespaçadas. Infelizmente, Latha é uma fonte sem espaçamento uniforme.

Existe uma maneira de hack para fazer isso acontecer: usando FontForge (você pode baixar o binário do Windows em http://www.geocities.jp/meir000/fontforge/ ) para editar o Latha.ttf e marcá-lo como uma fonte monoespaçada. Fazendo assim:

  1. Carregue o fontforge, selecione latha.ttf.
  2. Menu: Elemento -> Informações da fonte
  3. Selecione "OS / 2" na lista à esquerda na caixa de diálogo Informações da fonte
  4. Selecione a guia "Panose"
  5. Definir proporção = monoespaçado
  6. Salve a nova versão TTF desta fonte, experimente!

Boa sorte!

Yi Zhao
fonte
1
Não consegui alterar a fonte latha para monoespaçada. Eu segui exatamente seus passos, mas o arquivo salvo ainda não funciona como fonte monoespaçada :(
Sathish Manohar
1
@Sathish Manohar 1) sobrescrever o arquivo TTF existente, reinicie o Windows e experimente. ou 2) você pode salvar o TTF em um novo arquivo e modificar o nome da fonte. Instale o novo arquivo TTF. Esta nova fonte deve estar disponível em sua lista.
Yi Zhao
Depois de tantos anos (7 anos) depois, existem várias fontes gratuitas disponíveis para o VIM. Fontes Google Noto google.com/get/noto ; e Iosveka github.com/be5invis/Iosevka/releases são alternativas muito boas para avaliar.
Yi Zhao
3

No Linux, abra o arquivo de configuração do VIM

$ sudo -H gedit /etc/vim/vimrc

Adicionadas as seguintes linhas:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

Salvar e sair, e comando do terminal:

$ source /etc/vim/vimrc

Neste momento, o VIM exibirá chinês corretamente.

Paul Chen
fonte
2

Este problema foi resolvido entretanto?

Tive o problema de que o gvim não exibia todos os caracteres Unicode (mas apenas um subconjunto, incluindo tremas e caracteres acentuados), enquanto :set guifont?estava vazio; veja minha pergunta . Depois de ler aqui, definir o guifontcom um valor razoável fixou-o para mim. No entanto, não preciso de caracteres com mais de 2 bytes.

Tobias
fonte
1
O que é um valor razoável para guifont? O que você colocou?
Christian
Listei os valores que funcionaram para mim nesta resposta .
Tobias
2

Não consegui que nenhuma outra fonte que instalei apareça no meu editor do Windows GVim, então apenas mudei para aquela Lucida Consoleque tem pelo menos um suporte melhor para UTF-8. Adicione isto ao final de _vimrc:

" For making everything utf-8
set enc=utf-8
set guifont=Lucida_Console:h9:cANSI
set guifontwide=Lucida_Console:h12

Agora vejo pelo menos alguns caracteres UTF-8.

Ryan Shillington
fonte
no meu caso, cANSI teve que ser alterado para cGREEK (Editar -> Selecionar fonte ... no GVim), com fonte Consolas, a fim de exibir um arquivo de texto codificado UTF-8 com caracteres gregos corretamente
hello_earth
1

No Windows gvim basta selecionar a fonte "Lucida Console".

Alex Dvoretskiy
fonte