Jak mogę użyć vim do konwersji mojego pliku do utf8?

Odpowiedzi:

179

Jeśli edytujesz plik zakodowany jako latin1, zauważysz, że „fileencoding” dla tego bufora jest ustawione na latin1. Dlatego przed zapisaniem pliku musisz ręcznie ustawić kodowanie pliku.

:set fileencoding=utf8
:w myfilename

Należy również zauważyć, że pliki UTF8 często zaczynają się od znacznika kolejności bajtów (BOM), który wskazuje na koniec. Zestawienie komponentów jest opcjonalne, ale niektóre programy używają go wyłącznie do określenia kodowania pliku. W pewnych warunkach Vim zapisze BOM, ale czasami nie. Aby jawnie ustawić zestawienie komponentów, wykonaj następujące czynności:

:set bomb

Aby uzyskać więcej informacji :help mbyte-optionsi :help utf8i :help bomb.

Eric Johnson
źródło
Instrukcje okazują się działać dobrze, ale: 1) utf-8 nie ma endianness (jak wyjaśnia vim help , BOM utf-8 wskazuje tylko, że plik to utf-8); 2) Kiedy ponownie otworzysz plik później, musisz to zrobić set fileencoding=utf-8ponownie z przodu. Vim nawet nie zauważa BOM-a, jeśli kazałeś mu je napisać (i rzeczywiście to robi). Aby utf-8 działał, potrzebujesz tego lub set encoding=utf-8w ustawieniach uruchamiania. Tak przynajmniej wygląda mój system.
Stein
35
:w ++enc=utf-8 %

aby zapisać plik w kodowaniu utf-8 na dysk.

Michael Krelin - haker
źródło
5
Chociaż to prawda, twoja odpowiedź nie powinna była zebrać tak wielu pozytywnych głosów w porównaniu do Erica Johnsona. Powodem jest to, że jeśli nie ustawisz fileencoding, to :w ++enc=utf-8jest ważny raz, ale następnym razem, gdy uruchomisz :w, wartość 'fileencoding'zostanie użyta, a jeśli jej nie zmieniłeś (wyraźnie podczas edycji lub przeładowując plik, mając nadzieję które 'fencs'jest odpowiednio ustawione, a rzeczywiste kodowanie jest dobrze wykryte), powróci stare kodowanie.
Benoit,
1
@ MichaelKrelin-hacker, zmiana fileencodingjest również poprawną odpowiedzią na pytanie, które IMO nie prowadzi do przyjęcia złych nawyków. Ale OK, to tylko kwestia nastroju, jak sądzę.
Benoit,
3
@Benoit, nie sugerowałem, że odpowiedź Erica jest nieprawidłowa! Jeśli znajdę coś dziwnego o jego odpowiedź, to nie treść, ale dlaczego on odpowiedzieć na pytanie oraz odpowiedź na swoje własne pytanie w krótkim odstępie czasu :)
Michael Krelin - hakera
3
@Michael Krelin - haker: sprawdź FAQ. Właściwie zachęcamy do udzielenia odpowiedzi na własne pytanie. To jest sedno takiej strony z pytaniami i odpowiedziami. Nie ma znaczenia, kto odpowiada.
0xC0000022L
2
@ 0xC0000022L, kiedy ostatnio sprawdzałem (nie sprawdzałem), było coś o wymyśleniu rozwiązania po przeprowadzeniu badań, a nie o wysłaniu pytania i odpowiedzi w ciągu minuty . To powiedziawszy, mówiłem tylko o tym, co jest dziwne w jego odpowiedzi, a nie o tym, co czyni ją nieważną czy coś w tym rodzaju.
Michael Krelin - haker