2012-10-19 9 views
17

Edytuję wszystkie rodzaje plików za pomocą Vima (ponieważ jestem pewien, że robią to większość użytkowników Vima). Jednym z niedźwiedzi błędów jest to, co robi Vim, gdy natknę się na plik z dziwnym kodowaniem. Większość edytorów (obecnie) robi dobre ukłucie w wykrywaniu kodowania plików. Jednak Vim na ogół tego nie robi. I trzeba wpisać, na przykład:Czy jest możliwe automatyczne ustawienie kodowania pliku UTF16 podczas otwierania pliku tego typu?

:e ++enc=utf-16le 

do ponownego odczytania pliku w UTF-16 (W przeciwnym razie można uzyskać masę @ znaków)

Szukałem wokół i widzieliśmy skrypty jak set_utf8.vim, który może wykryć określone kodowanie pliku. Czy jest jednak bardziej ogólne rozwiązanie? Trochę się nudzę, że muszę ręcznie wyłapać kodowanie plików i korzystać z pomocy za każdym razem, gdy otworzę nietypowy plik.

Odpowiedz

10

Dodanie nazwy kodowania do 'fileencodings' powinno załatwić sprawę:

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

Alternatywnie istnieje plugins jak AutoFenc i fencview.

+0

+1 Te wyglądają bardzo użytecznie, chociaż niestety nie działają na moich plikach dziennika BRAF16 BOMless, no cóż, ja "Po prostu dodaj konkretny AutoFileCmd dla tych ... Dzięki! – Benj

2

Czy masz znak kolejności bajtu? Vim powinien to wykryć i działać poprawnie. Od the doc - section 45.4:

Po rozpoczęciu edycji to 16-bitowy plik Unicode, a to ma BOM Vim wykryje to i przekonwertować plik do UTF-8 podczas czytania go. Opcja "fileencoding" (bez s na końcu) jest ustawiona na wykrytą wartość . W tym przypadku jest to "utf-16le". Oznacza to, że jest to kodowanie Unicode, 16-bit i little-endian. Ten format pliku jest wspólny dla MS-Windows (np. Dla plików rejestru).

+0

Hmm, ten konkretny plik nie ma BOM (co jest dziwne w systemie Windows), dobrze wiedzieć, że to będzie działać na plikach z BOM choć ... – Benj

+1

To nie działa dla mnie. Gvim w systemie Windows, plik > xxd. \ Utf16.txt 00000000: fffe 4100 4200 a300 2400 ac20 6300 6400 ..A.B ... $ .. c.d. 00000010: 6500 0d00 0a00 e ..... Kiedy robię "gvim utf16.txt", widzę "^A^@ B^@ £^@ $^@ ¬ c^@ d^@ e^@^M^@ '... (przepraszam za formatowanie, nie mam pojęcia, jak zrobić sformatowany tekst w komentarzu ...) –

0

Dodaj ten kod do swojej .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 
Powiązane problemy