Quando Vim legge un file esistente, prova a rilevare la codifica del file. Quando si scrive il file, Vim utilizza la codifica del file rilevato (tranne quando lo si dice in modo diverso). Quindi un file rilevato come UTF-8 è scritto come UTF-8, un file rilevato come Latin-1 è scritto come Latin-1 e così via.
Per impostazione predefinita, il processo di rilevamento è grezzo. Si presume che ogni file che apri con Vim sia Latin-1, a meno che non rilevi un segno di ordine byte Unicode in alto. Un file UTF-8 senza un contrassegno dell'ordine dei byte sarà difficile da modificare perché qualsiasi carattere multibyte verrà mostrato nel buffer come sequenze di caratteri anziché singoli caratteri.
Peggio ancora, Vim, per impostazione predefinita, utilizza Latin-1 per rappresentare il testo nel buffer. Quindi un file UTF-8 con un segno di ordine byte sarà corrotto dalla conversione in down-Latin-1.
La soluzione è configurare Vim per usare UTF-8 internamente. Questo è, in effetti, raccomandato nella documentazione di Vim, e l'unica ragione per cui non è configurato in questo modo è per evitare di creare un'enorme confusione tra gli utenti che si aspettano che Vim operi sostanzialmente come un editor Latin-1.
Nel tuo .vimrc
, aggiungi set encoding=utf-8
e riavvia Vim.
O invece, imposta la LANG
variabile d'ambiente per indicare che UTF-8 è la tua codifica dei caratteri preferita. Ciò influirà non solo su Vim ma su qualsiasi software che si affida LANG
per determinare come dovrebbe rappresentare il testo. Ad esempio, per indicare che il testo dovrebbe apparire in inglese ( en
), come parlato negli Stati Uniti ( US
), codificato come UTF-8 ( utf-8
), impostare LANG=en_US.utf-8
.
Ora Vim utilizzerà UTF-8 per rappresentare il testo nel buffer. Inoltre, farà uno sforzo più determinato per rilevare la codifica UTF-8 in un file. Oltre a cercare un segno di ordine byte, controllerà anche UTF-8 senza un segno di ordine byte prima di tornare a Latin-1. Quindi non corromperà più un file codificato in UTF-8 e dovrebbe visualizzare correttamente i caratteri UTF-8 durante la sessione di modifica.
Per ulteriori informazioni su come Vim rileva la codifica dei file, vedere l'
fileencodings
opzione nella documentazione di Vim .
Per ulteriori informazioni sull'impostazione della codifica utilizzata da Vim internamente, vedere l' encoding
opzione .
Se è necessario sovrascrivere la codifica utilizzata durante la scrittura di un file sul disco, vedere l' fileencoding
opzione .
.vimrc
; infatti il valore predefinito della codifica è "latin1" o valore da $ LANG, che sul mio sistema è impostato suen_US.UTF-8
. Per questo motivo:set encoding
dàencoding=utf-8
fuori dalla scatola. Come previsto, se LANG non è impostato,:set encoding
restituisceencoding=latin1
. Grazie per la magnifica risposta!