web-dev-qa-db-fra.com

Comment puis-je définir l'encodage par défaut de VIM sur UTF-8?

J'aimerais contribuer à un projet open source fournissant des chaînes traduites. L'une de leurs exigences est que les contributeurs doivent utiliser UTF-8 comme encodage pour les fichiers PO.

J'utilise VIM 7.3 sous Linux. Comment puis-je être sûr que l'encodage de VIM est réglé sur UTF-8, afin de pouvoir éditer et enregistrer le fichier .po de la bonne façon?

63
Paolo

Lorsque Vim lit un fichier existant, il essaie de détecter l'encodage du fichier. Lors de l'écriture du fichier, Vim utilise l'encodage de fichier qu'il a détecté (sauf lorsque vous le dites différemment). Ainsi, un fichier détecté en UTF-8 est écrit en UTF-8, un fichier détecté en Latin-1 est écrit en Latin-1, etc.

Par défaut, le processus de détection est brut. Chaque fichier que vous ouvrez avec Vim sera supposé être Latin-1, à moins qu'il ne détecte une marque d'ordre d'octets Unicode en haut. Un fichier UTF-8 sans marque d'ordre des octets sera difficile à modifier car tous les caractères multi-octets seront affichés dans le tampon sous forme de séquences de caractères au lieu de caractères uniques.

Pire, Vim, par défaut, utilise Latin-1 pour représenter le texte dans le tampon. Ainsi, un fichier UTF-8 avec une marque d'ordre des octets sera corrompu par une conversion vers le bas en Latin-1.

La solution consiste à configurer Vim pour utiliser UTF-8 en interne. C'est, en fait, recommandé dans la documentation de Vim, et la seule raison pour laquelle il n'est pas configuré de cette façon est d'éviter de créer une énorme confusion parmi les utilisateurs qui s'attendent à ce que Vim fonctionne essentiellement comme un éditeur Latin-1.

Dans ton .vimrc, ajouter set encoding=utf-8 et redémarrez Vim.

Ou, à la place, définissez la variable d'environnement LANG pour indiquer que UTF-8 est votre codage de caractères préféré. Cela affectera non seulement Vim mais tout logiciel qui s'appuie sur LANG pour déterminer comment il doit représenter le texte. Par exemple, pour indiquer que le texte doit apparaître en anglais (en), comme parlé aux États-Unis (US), codé en UTF-8 (utf-8), ensemble LANG=en_US.utf-8.

Maintenant, Vim utilisera UTF-8 pour représenter le texte dans le tampon. De plus, il fera également un effort plus déterminé pour détecter l'encodage UTF-8 dans un fichier. En plus de rechercher une marque d'ordre des octets, il vérifiera également UTF-8 sans marque d'ordre des octets avant de retomber en Latin-1. Ainsi, il ne corrompra plus un fichier codé en UTF-8, et il devrait afficher correctement les caractères UTF-8 pendant la session d'édition.

Pour plus d'informations sur la façon dont Vim détecte l'encodage des fichiers, voir l'option fileencodings dans la documentation Vim .

Pour plus d'informations sur la définition du codage utilisé par Vim en interne, consultez l'option encoding .

Si vous devez remplacer l'encodage utilisé lors de la réécriture d'un fichier sur le disque, consultez l'option fileencoding .

67
MetaEd

Selon vimdoc vim essaie de détecter automatiquement l'encodage des fichiers, donc si vous éditez les fichiers existants vous devez être bon.

Vous pouvez toujours forcer l'encodage si vous le souhaitez avec :set fileencodings=utf-8. Vous pouvez trouver la documentation ici .

5
Mr Shunz