Comment afficher les caractères UTF-8 dans VIM ou Gvim

106

Je travaille de temps en temps sur des pages Web impliquant des scripts non anglais, la plupart d'entre eux utilisent le jeu de caractères utf-8, VIM et Gvim n'affiche pas correctement les caractères UTF-8.

Utilisation de VIM 7.3.46 sur Windows 7 64 bits, avec set guifont=Monaco:h10dans _vimrc

Y'a t'il un moyen d'arranger cela?

Mise à jour: J'ai cherché sur Google et trouvé des set guifontwideactes comme deuxième solution de secours pour les langues régionales.

J'ai ajouté les lignes suivantes dans _vimrc et la plupart de mes problèmes ont été résolus.

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

La police ci - dessus NSimsun fonctionne pour le chinois, le problème est que je ne sais pas comment ils ont obtenu le nom de la police à travailler avec VIM, Courier Newest mentionné comme Courier_Newégalement NSimsunnulle part dans le répertoire de la police. La police que je veux utiliser est LathaMais, je ne sais pas comment l'utiliser dans le fichier _vimrc. set guifontwide=latha:h12ou set guifontwide=Latha:h12ne fonctionne pas.

Si je réussis à définir le guifontwidesur latha, mon problème sera résolu, comment le faire?

Sathish Manohar
la source
quelle est la valeur 'guifont'et la valeur de 'guifontwide'? De plus, quel système d'exploitation utilisez-vous et quelle version de vim?
Benoit
Sathish, avez-vous pu trouver une solution à cela? J'essaye de taper gVim avec le logiciel eKalappai mais vim ne me montre que ?? caractères (apparemment en les sauvegardant de la même manière).
sundar
@sundar Non. J'ai abandonné: |
Sathish Manohar
Mon problème était que inconsolata-g ne prend pas en charge les caractères utf-8 dans mon document.
AndrewPK
L'utilisation set guifontwide=NSimsun:h12échoue pour moi, dit "Police large invalide" probablement le même problème non monospace?
mikew

Réponses:

61

Essayez de recharger le document en utilisant:

:e! ++enc=utf8

Si cela fonctionne, vous devriez peut-être modifier les fileencodingsparamètres de votre .vimrc.

Benoit
la source
2
Ça ne change rien pour moi
Thomas Levesque
8
NE l' exécutez PAS avant d'enregistrer votre travail car cela effacera les modifications que vous avez apportées. :uvous sauvera cependant.
De plus, cela définit le fichier en lecture seule lorsque vous faites cela, vous devez donc également exécuter:set noro
Matt Vukomanovic
2
Merci pour cela. Vim ne rendait pas utf-8 dans mon cas car j'avais un bloc de données binaires (pièce jointe multipart / form-data). Quand je l'ai fait :e! ++enc=utf8, il a rendu l'utf-8, mais s'est plaint [ILLEGAL BYTE in line 286](la première ligne de partie binaire) à l'intérieur du fichier. Je suppose que le comportement par défaut est de revenir silencieusement à un autre codage lorsque cela se produit à l'ouverture de Vim. Pour une raison quelconque, cependant, echo &encrapporte encore utf-8 dans ce cas.
Dmitry Minkovsky
1
@DmitryMinkovsky, &encest l'encodage que vim utilise en interne pour stocker le contenu du tampon. Le paramètre qui contient l'encodage du fichier actuel est&fenc
Benoit
60

As-tu essayé

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

?

Maxim Sloyko
la source
5
J'ai essayé avec ces deux paramètres et je ne vois toujours pas les caractères utf-8.
Sathish Manohar
1
-1. En fait, cela ne peut pas fonctionner. Aucune de ces options ne rechargera le fichier. Le premier modifiera la façon dont vim stocke les tampons (et autres) en interne, le second spécifiera que vous souhaitez modifier l'encodage d'un fichier déjà chargé dans un tampon, ce qui s'appliquera lors de son enregistrement.
Benoit
:set encoding=utf8 WILL rafraîchir la mémoire tampon et si le problème était dans le codage incorrect, il va fixer. J'ai ajouté une set fileencoding=utf8option pour que vous ne rencontriez pas l'erreur la plus déroutante "Impossible de convertir certains caractères" lors de l'enregistrement.
Maxim Sloyko
ensemble de codage a fonctionné. J'ai ajouté set encoding = utf8 au fichier .vimrc et maintenant tout est ok avec utf8.
Alexander Kim
Sous OSX, j'ai ajouté ces deux lignes (sans les deux points) à mon ~/.vimrcet cela a bien fonctionné
lionello
7

Si des Japonais viennent ici, veuillez ajouter les lignes suivantes à votre ~/.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
kujiy
la source
6

Sous Microsoft Windows, gvim ne vous permettrait pas de sélectionner des polices non monospaces. Malheureusement Latha est une police non monospace.

Il y a un moyen de pirater pour y arriver: en utilisant FontForge (vous pouvez télécharger le binaire Windows à partir de http://www.geocities.jp/meir000/fontforge/ ) pour éditer le Latha.ttf et le marquer comme une police à espacement fixe. Faire comme ça:

  1. Chargez fontforge, sélectionnez latha.ttf.
  2. Menu: Élément -> Informations sur la police
  3. Sélectionnez "OS / 2" dans la liste de gauche de la boîte de dialogue Informations sur la police
  4. Sélectionnez l'onglet "Panose"
  5. Définir la proportion = monospace
  6. Enregistrez la nouvelle version TTF de cette police, essayez-la!

Bonne chance!

Yi Zhao
la source
1
Je ne pouvais pas changer la police latha en monospace. J'ai suivi vos étapes exactement mais le fichier enregistré ne fonctionne toujours pas en tant que police à espacement fixe :(
Sathish Manohar
1
@Sathish Manohar 1) écrasez le fichier TTF existant, redémarrez votre Windows et essayez-le. ou 2) vous pouvez enregistrer le TTF dans un nouveau fichier et modifier le nom de la police. Installez le nouveau fichier TTF. Cette nouvelle police devrait être disponible dans votre liste.
Yi Zhao
Après toutes ces années (7 ans) plus tard, plusieurs polices gratuites sont disponibles pour VIM. Polices Google Noto google.com/get/noto ; et Iosveka github.com/be5invis/Iosevka/releases sont de très bonnes alternatives à évaluer.
Yi Zhao
3

Sous Linux, ouvrez le fichier de configuration VIM

$ sudo -H gedit /etc/vim/vimrc

Ajout des lignes suivantes:

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

Enregistrer et quitter, et commande de terminal:

$ source /etc/vim/vimrc

À ce moment, VIM affichera correctement le chinois.

Paul Chen
la source
2

Ce problème est-il résolu entre-temps?

J'ai eu le problème que gvim n'affichait pas tous les caractères Unicode (mais seulement un sous-ensemble, y compris les trémas et les caractères accentués), alors qu'il :set guifont?était vide; voir ma question . Après avoir lu ici, définir le guifontsur une valeur raisonnable l'a corrigé pour moi. Cependant, je n'ai pas besoin de caractères au-delà de 2 octets.

Tobias
la source
1
Qu'est-ce qu'une valeur raisonnable pour guifont? Qu'avez-vous mis?
Christian
J'ai énuméré les valeurs qui ont fonctionné pour moi dans cette réponse .
Tobias
2

Je ne pouvais pas faire apparaître d'autres polices installées dans mon éditeur Windows GVim, alors je suis juste passé à celle Lucida Consolequi a au moins un meilleur support UTF-8. Ajoutez ceci à la fin de votre _vimrc:

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

Maintenant, je vois au moins quelques caractères UTF-8.

Ryan Shillington
la source
dans mon cas, cANSI a dû être changé en cGREEK (Edit -> Select Font ... in GVim), avec la police Consolas, afin d'afficher correctement un fichier texte encodé UTF-8 avec des caractères grecs
bonjour_earth
1

Sous Windows gvim, sélectionnez simplement la police "Lucida Console".

Alex Dvoretskiy
la source