Come posso impostare la codifica predefinita di VIM su UTF-8?


62

Vorrei contribuire a un progetto open source fornendo stringhe tradotte. Uno dei loro requisiti è che i contributori devono usare UTF-8 come codifica per i file PO.

Sto usando VIM 7.3 su Linux. Come posso essere sicuro che la codifica di VIM sia impostata su UTF-8, in modo da poter modificare e salvare il file .po nel modo giusto?

Risposte:


64

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-8e riavvia Vim.

O invece, imposta la LANGvariabile 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 LANGper 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' fileencodingsopzione 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 .


3
In realtà sembra che non debba nemmeno preoccuparmi del montaggio .vimrc; infatti il ​​valore predefinito della codifica è "latin1" o valore da $ LANG, che sul mio sistema è impostato su en_US.UTF-8. Per questo motivo :set encodingencoding=utf-8fuori dalla scatola. Come previsto, se LANG non è impostato, :set encodingrestituisce encoding=latin1. Grazie per la magnifica risposta!
Paolo,

Potrebbe essere generalmente utile, quindi l'ho aggiunto alla risposta.
MetaEd,

Se apri un file codificato come latin1, questa impostazione non cambierà la codifica del file? Come puoi ottenere Vim per mantenere intatta la codifica di un file ma preferendo utf-8 per i nuovi file?
David Kennedy,

@DaveKennedy Vim è in grado di trattare il file come Latin-1 solo quando il file è inequivocabilmente Latin-1. Quando la codifica è ambigua, Vim deve scegliere. Ad esempio, un file contenente solo codici ASCII a 7 bit è valido Latin1 ma è anche valido UTF-8 e altri. Tale file verrà normalmente trattato come UTF-8. Un modo per evitare questo risultato è di rendere inequivocabile la codifica del file. Il trucco che ho visto è quello di aggiungere una stringa di codici 0xF7. In UTF-8, 0xF7 non è valido. Ma in latino-1, rappresenta il segno di divisione (÷). Vim normalmente concluderà che il file è Latin-1.
MetaEd

4

Secondo vimdoc vim prova a rilevare automaticamente la codifica dei file, quindi se stai modificando i file esistenti devi essere buono.

Puoi sempre forzare la codifica se lo desideri :set fileencodings=utf-8. Puoi trovare la documentazione qui .


6
fileencodings = utf-8 farà sì che Vim riconosca il file di input come UTF-8 ma esegua una conversione con perdita in Latin-1. Inoltre, Vim non riconoscerà UTF-16. La soluzione migliore è impostare encoding = utf-8 che trasforma Vim da un editor nativo a un byte in un editor multibyte nativo.
MetaEd,

@MetaEd può rispondere presente per elaborare il tuo commento :)
HHH
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.