2012-10-19 11 views
17

Modifica tutti i tipi di file con Vim (come sono sicuro che la maggior parte degli utenti di Vim). Un orsetto di bug che ho è quello che fa Vim quando trovo un file con una codifica dispari. La maggior parte degli editori (al giorno d'oggi) è in grado di riconoscere le codifiche dei file. Tuttavia, Vim generalmente non lo fa. E si deve digitare, per esempio:È possibile impostare automaticamente la codifica dei file UTF16 all'apertura di un file di quel tipo?

:e ++enc=utf-16le 

a rileggere il file in UTF-16 (In caso contrario, si ottiene una massa di segni @)

ho cercato in giro e hanno visto gli script come set_utf8.vim che può rilevare una codifica di file specifica. Tuttavia, c'è una soluzione più generale? Sono un po 'annoiato di dover calcolare manualmente la codifica del file e consultare l'aiuto ogni volta che apro un file insolito.

risposta

10

Aggiungendo il nome della codifica a 'fileencodings' dovrebbe fare il trucco:

:set fencs=ucs-bom,utf-16le,utf-8,default,latin1 

In alternativa, ci sono plugin come AutoFenc e fencview.

+0

+1 Questi sembrano molto utili, anche se purtroppo non funzionano sui miei file di registro UTOM16 BOMless, ah bene, io aggiungerò un AutoFileCmd specifico per quelli ... Grazie però! – Benj

2

Hai un segno di ordinamento dei byte? Vim dovrebbe rilevarlo e lavorare in modo appropriato. Da the doc - section 45.4:

Quando iniziare a modificare il file Unicode a 16 bit, e ha un BOM, Vim rileverà questo e convertire il file in UTF-8 durante la lettura di esso. L'opzione "codifica file" (senza s alla fine) è impostata sul valore rilevato . In questo caso è "utf-16le". Ciò significa che è Unicode, 16-bit e little-endian. Questo formato di file è comune su MS-Windows (ad esempio, per i file di registro).

+0

Hmm, questo particolare file non dispone di una distinta base (che è strano su Windows) bene sapere che questo dovrebbe funzionare su file con un BOM comunque ... – Benj

+1

Questo non funziona per me. Gvim su Windows, file > xxd. \ Utf16.txt 00000000: fffe 4100 4200 a300 2400 ac20 6300 6400 .. A.B ... $ .. c.d. 00000010: 6500 0d00 0a00 e ..... Quando faccio "gvim utf16.txt" vedo 'ÿþA^@ B^@ £^@ $^@ ¬ c^@ d^@ e^@^M^@ '... (scusate la formattazione, non ho idea di come fare un testo preformattato in un commento ...) –

0

Aggiungi questo codice al vostro Vimrc:

if has("multi_byte") 
    if &termencoding == "" 
    let &termencoding = &encoding 
    endif 
    set encoding=utf-8 
    setglobal fileencoding=utf-8 
    "setglobal bomb 
    set fileencodings=ucs-bom,utf-8,latin1 
endif 
Problemi correlati