Kiedy Vim odczytuje istniejący plik, próbuje wykryć kodowanie pliku. Podczas zapisywania pliku Vim używa wykrytego kodowania pliku (z wyjątkiem sytuacji, gdy powiesz inaczej). Plik wykryty jako UTF-8 jest zapisywany jako UTF-8, plik wykryty jako Latin-1 jest zapisywany jako Latin-1 i tak dalej.
Domyślnie proces wykrywania jest surowy. Zakłada się, że każdy plik otwierany za pomocą Vima to Latin-1, chyba że wykryje u góry znak kolejności bajtów Unicode. Plik UTF-8 bez znaku kolejności bajtów będzie trudny do edycji, ponieważ wszelkie znaki wielobajtowe będą wyświetlane w buforze jako sekwencje znaków zamiast pojedynczych znaków.
Co gorsza, Vim domyślnie używa Latin-1 do reprezentowania tekstu w buforze. Tak więc plik UTF-8 ze znakiem kolejności bajtów zostanie uszkodzony przez konwersję w dół do Latin-1.
Rozwiązaniem jest skonfigurowanie Vima do używania UTF-8 wewnętrznie. Jest to w rzeczywistości zalecane w dokumentacji Vima, a jedynym powodem, dla którego nie jest tak skonfigurowany, jest uniknięcie ogromnego zamieszania wśród użytkowników, którzy oczekują, że Vim będzie działał zasadniczo jako edytor Latin-1.
W swoim .vimrc
dodaj set encoding=utf-8
i uruchom ponownie Vima.
Lub zamiast tego ustaw LANG
zmienną środowiskową, aby wskazać, że UTF-8 jest preferowanym kodowaniem znaków. Wpłynie to nie tylko na Vima, ale także na wszelkie oprogramowanie, które polega na LANG
określeniu, jak powinien reprezentować tekst. Na przykład, aby wskazać, że tekst powinien być wyświetlany w języku angielskim ( en
), jak mówi się w Stanach Zjednoczonych ( US
), zakodowanym jako UTF-8 ( utf-8
), ustaw LANG=en_US.utf-8
.
Teraz Vim użyje UTF-8 do przedstawienia tekstu w buforze. Ponadto podejmie również bardziej zdecydowany wysiłek w celu wykrycia kodowania UTF-8 w pliku. Oprócz szukania znaku kolejności bajtów, sprawdzi także UTF-8 bez znaku kolejności bajtów, zanim wróci do Latin-1. Dlatego nie będzie już uszkadzał pliku zakodowanego w UTF-8 i powinien poprawnie wyświetlać znaki UTF-8 podczas sesji edycji.
Aby uzyskać więcej informacji na temat Vim wykrywa kodowanie pliku, patrz na
fileencodings
opcję w dokumentacji Vima .
Aby uzyskać więcej informacji na temat ustawiania kodowania że Vim używa wewnętrznie, patrz na encoding
opcję .
Jeśli trzeba zmienić kodowanie używane podczas zapisywania pliku na dysk, zobacz ten fileencoding
opcję .
.vimrc
; w rzeczywistości domyślna wartość kodowania to „latin1” lub wartość z $ LANG, która w moim systemie jest ustawiona naen_US.UTF-8
. Z tego powodu:set encoding
daje poencoding=utf-8
wyjęciu z pudełka. Zgodnie z oczekiwaniami, jeśli LANG jest rozbrojony,:set encoding
dajeencoding=latin1
. Dzięki za świetną odpowiedź!