Question Comment trouver le codage du tampon actuel dans vim?


Supposons que je modifie un fichier avec vim (ou gvim). Je n'ai aucune idée de l'encodage du fichier et je veux savoir si c'est dans UTF-8 ou ISO-8859-1 ou autre chose? Puis-je dire à vim de me montrer quel encodage est utilisé?


79
2017-08-24 13:48


origine




Réponses:


Le paramètre de codage de fichier indique l'encodage actuel du tampon:

:set fileencoding
fileencoding=utf8

Il n'y a pas vraiment de moyen commun de déterminer l'encodage d'un fichier en texte brut, car cette information n'est pas enregistrée dans le fichier lui-même, sauf les fichiers UTF-8 où vous avez une nomenclature qui indique l'encodage. C'est pourquoi les fichiers xml et html ont des balises charset.

Vous pouvez appliquer un encodage particulier avec le paramètre "encoding". Voir :help encoding et :help fileencoding dans Vim pour savoir comment l'éditeur gère ces paramètres. Vous pouvez également ajouter plusieurs paramètres de codage de fichiers à votre vimrc pour que vim essaie de détecter les fichiers répertoriés.


88
2017-08-24 13:52



Parfait. Même si quelque peu contre-intuitif. Je vous remercie! - innaM
Malheureusement, pas correct. Pour Vim ne peut pas trouver l'encodage du fichier que vous lisez. Il n'est pas écrit dans le fichier. Il ne peut que deviner en fonction des caractères disponibles dans le fichier. Par exemple, un fichier avec le texte "abcdef" peut être dans plusieurs codages, étant donné que pratiquement tous ces caractères sont pris en charge, mais un fichier avec "šđčćž" sera probablement dans CP1252. Donc, vous ne lisez pas le codage à partir de quelque part, mais devinez ce que pourrait être l'encodage, et basé sur cela l'affichant correctement. - Rook
Ce que vous faites ici est explicitement réglage l'encodage, basé sur vos observations du contenu du fichier. Si vous souhaitez que vim essaie plusieurs encodages, lors de l'ouverture d'un fichier, mettez-en plusieurs dans l'option _vimrc. - Rook
@ldigas, merci pour les commentaires, j'ai mis à jour la réponse pour être un peu plus clair à ce sujet (j'espère!) - jtimberman
Il convient probablement de mentionner que les nomenclatures sont 1.) Pas unique à UTF-8 - bien que UTF-8 soit distinct des autres nomenclatures, 2.) Non requis et souvent introuvable dans UTF-8. - ruffin


Notez que le codage des fichiers est pas explicitement indiqué n'importe où dans un fichier. Ainsi, VIM et d'autres applications doivent deviner l'encodage. La manière canonique de le faire est avec le chardet application, qui peut être exécutée depuis VIM comme suit:

:!chardet %

La réponse fournie par jtimberman vous montre l'encodage du tampon courant qui peut ne pas être le même encodage que le fichier sur le disque. Ainsi, vous remarquerez que chardet affichera parfois un encodage différent de VIM, surtout si vous avez configuré VIM pour utiliser toujours un codage spécifique (à savoir UTF-8).

La bonne chose à propos de chardet est que cela donne un score de confiance pour son estimation, alors que VIM peut être (et est souvent) faux de deviner l'encodage s'il n'y a pas beaucoup de caractères au-dessus de \ x7F (ASCII 127). Par exemple, ajouter un seul א à un long fichier de code PHP fait chardet pense que le fichier est ISO-8859-2 avec une confiance de 0,72, tandis que l'ajout de la phrase légèrement plus longue שלום, עולם!‏ donne UTF-8 avec un score de confiance de 0,99. Dans les deux cas, set fileencoding? montré UTF-8 pas parce que le fichier sur le disque était UTF-8, mais parce que VIM est configuré pour utiliser UTF-8 en interne.


12
2017-12-26 06:59