Lorsque Vim lit un fichier existant, il essaie de détecter le codage du fichier. Lors de l'écriture du fichier, Vim utilise le codage de fichier qu'il a détecté (sauf si vous le dites différemment). Ainsi, un fichier détecté en tant que UTF-8 est écrit en UTF-8, un fichier détecté en tant que Latin-1 est écrit en tant que Latin-1, et ainsi de suite.
Par défaut, le processus de détection est brut. Chaque fichier que vous ouvrez avec Vim sera considéré comme étant Latin-1, à moins qu'il ne détecte une marque d'ordre d'octet Unicode en haut. Un fichier UTF-8 sans marque d'ordre d'octet sera difficile à modifier car tous les caractères multi-octets seront affichés dans la mémoire tampon sous forme de séquences de caractères au lieu de caractères uniques.
Pire, Vim utilise par défaut Latin-1 pour représenter le texte dans la mémoire tampon. Donc, un fichier UTF-8 avec une marque d'ordre d'octet sera corrompu par conversion vers le bas en Latin-1.
La solution consiste à configurer Vim pour utiliser UTF-8 en interne. Ceci est en fait recommandé dans la documentation de Vim, et la seule raison pour laquelle il n’a pas été configuré de cette manière est pour éviter de créer une énorme confusion chez les utilisateurs qui s’attendent à ce que Vim fonctionne essentiellement comme un éditeur Latin-1.
Dans votre .vimrc
, ajoutez set encoding=utf-8
et redémarrez Vim.
Sinon, définissez la LANG
variable d'environnement pour indiquer qu'UTF-8 est votre codage de caractères préféré. Cela n’affectera pas seulement Vim, mais tout logiciel sur lequel il s’appuie LANG
pour déterminer comment il doit représenter le texte. Par exemple, pour indiquer que le texte doit apparaître en anglais ( en
), tel que parlé aux États-Unis ( US
), codé sous la forme UTF-8 ( utf-8
), définissez LANG=en_US.utf-8
.
Maintenant, Vim utilisera UTF-8 pour représenter le texte dans le tampon. De plus, il fera un effort plus déterminé pour détecter le codage UTF-8 dans un fichier. En plus de rechercher une marque d'ordre d'octet, il recherchera également UTF-8 sans marque d'ordre d'octet avant de retomber sur Latin-1. Donc, il ne corrompra plus un fichier codé en UTF-8 et il devrait afficher correctement les caractères UTF-8 pendant la session de montage.
Pour plus d'informations sur la manière dont Vim détecte le codage de fichier, voir l'
fileencodings
option dans la documentation de Vim .
Pour plus d'informations sur la définition du codage utilisé en interne par Vim, voir l' encoding
option .
Si vous devez remplacer le codage utilisé lors de l'écriture d'un fichier sur le disque, reportez-vous à l' fileencoding
option .
.vimrc
; En fait, la valeur par défaut de l'encodage est "latin1" ou la valeur de $ LANG, qui est définie sur mon systèmeen_US.UTF-8
. Pour cette raison:set encoding
donneencoding=utf-8
hors de la boîte. Comme prévu, si LANG n'est pas défini,:set encoding
donneencoding=latin1
. Merci pour la bonne réponse!