Vim/Kodowanie
Kodowanie
[edytuj]Ustawienia dla polskiej normy kodowania wszystkich otwieranych plików:
set fencs=iso-8859-2
Łatwiejszą do zapamiętania nazwą kodowania iso-8859-2 jest Latin-2:
set fencs=latin2
Jeśli widzisz na ekranie krzaczki, zamiast prawidłowych znaków, możesz przeładować plik w innym kodowaniu:
:e ++enc=<encoding>
To polecenie nie zmieni jednak kodowania już napisanego tekstu. Do tego celu na *nixach jest polecenie iconv
iconv -f ISO-8859-2 -t UTF-8 plik.wejsciowy -o plik.wyjsciowy
Można także zastosować zapis do pliku (pominięcie nadpisze plik) z konwersją do kodowania do <encoding>
:w ++enc=<encoding> nazwa_pliku_wyjściowego
np.
:w ++enc=latin2 :w ++enc=utf-8 innyplik
Konwersja z zestawu szerszego do węższego (np. z utf-8 do iso-8859-2) może się nie powieść. Przyczyna leży w niemożności konwersji znaków z zestawu szerszego nie mających odpowiednika w zestawie węższym.
edytowanie plików utf8 w vim przez ssh
[edytuj]:e ++enc=utf8 :set tenc=utf8
użyj również fontu wspierającego utf8 http://piao-tech.blogspot.com/2009/06/handling-multiple-encodings-in-vim.html
Przydatne polecenia
[edytuj]:help ++opt :help mbyte-encoding :help encoding-values :help 'fileencodings' /"ucs-bom" :help 'bomb'
szczególnie ostatni paragraf:
:help :set^=
Wyjaśnienie kodowania
[edytuj]'termencoding' jest zestawem znaków dla klawiatury, oraz (tylko w konsolowym Vimie) dla ekranu.
'printencoding' jest zestawem znaków dla drukarki, jeśli oba +printer i +postscript są wkompilowane.
Konwersja przebiega następująco, jeśli zestawy znaków różnią się a metoda konwersji jest znana:
- 'fileencoding' na 'encoding' podczas czytania z dysku
- 'termencoding' na 'encoding' podczas wpisywania z klawiatury
- (tylko w konsolowym Vimie): 'encoding' na 'termencoding' podczas wyświetlania
- 'encoding' na 'printencoding' podczas drukowania przez PostScript
- 'encoding' na 'fileencoding' podczas zapisu na dysk
Użycie ":w ++enc=XXX" nie zmienia zachowania domyślnego (ang. ulterior?) zapisu.
Użycie 'fileencoding' (które lepiej zmieniać przez ":setlocal" niż ":set") zmienia zachowanie zapisu.
fileencodings różni się od fileencoding tym, że ustawia domyślny zapis dla wszystkich plików.