Przejdź do zawartości

Vim/Kodowanie

Z Wikibooks, biblioteki wolnych podręczników.
< Vim

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^=

[1]

Wyjaśnienie kodowania

[edytuj]

[2]

'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.