it-swarm-eu.dev

Come trovo la codifica del buffer corrente in vim?

Supponiamo che io stia modificando alcuni file con vim (o gvim). Non ho idea della codifica del file e voglio sapere se è in UTF-8 o ISO-8859-1 o qualsiasi altra cosa? Posso in qualche modo dire a vim di mostrarmi quale codifica è usata?

88
innaM

L'impostazione di codifica file mostra la codifica del buffer corrente:

:set fileencoding
fileencoding=utf8

Non esiste in realtà un modo comune per determinare la codifica di un file di testo in chiaro, poiché tali informazioni non vengono salvate nel file stesso, tranne i file UTF-8 in cui è presente una cosiddetta distinta materiali che indica la codifica. Questo è il motivo per cui i file xml e html hanno i metatag charset.

Puoi applicare una particolare codifica con l'impostazione di 'codifica'. Vedi :help encoding e :help fileencoding in Vim per come l'editor gestisce queste impostazioni. Puoi anche aggiungere diverse impostazioni di codifica dei file al tuo vimrc per fare in modo che vim provi a rilevare in base a quelle elencate.

102
jtimberman

Si noti che la codifica dei file è non esplicitamente dichiarata ovunque in un file. Pertanto, VIM e altre applicazioni devono indovinare la codifica. Il modo canonico di farlo è con l'applicazione chardet, che può essere eseguita da VIM in questo modo:

:!chardet %

La risposta fornita da jtimberman mostra la codifica del buffer corrente che potrebbe non essere la stessa codifica del file su disco. Quindi, noterai che chardet a volte mostrerà una codifica diversa da VIM, specialmente se hai VIM configurato per usare sempre una codifica specifica (cioè UTF-8).

La cosa bella di chardet è che fornisce un punteggio di confidenza per la sua ipotesi, mentre VIM può essere (e spesso è) sbagliato nell'indovinare la codifica se non ci sono molti caratteri sopra\x7F (ASCII 127). Ad esempio, l'aggiunta di un singolo א a un file lungo di PHP codice rende chardet che il file è ISO-8859-2 con una confidenza di 0,72, mentre l'aggiunta della frase leggermente più lunga שלום, עולם!‏ fornisce UTF-8 con un punteggio di confidenza di 0.99. In entrambi i casi, set fileencoding? ha mostrato UTF-8 non perché il file su disco era UTF-8, ma poiché VIM è configurato per utilizzare internamente UTF-8.

12
dotancohen