Ustawienie kodowania pliku pokazuje kodowanie bieżącego bufora:
:set fileencoding
fileencoding=utf8
Naprawdę nie ma powszechnego sposobu określania kodowania pliku w postaci zwykłego tekstu, ponieważ te informacje nie są zapisywane w samym pliku - z wyjątkiem plików UTF-8, w których masz tak zwaną BOM, która wskazuje na kodowanie. Właśnie dlatego pliki xml i html mają metatagi charset.
Możesz wymusić określone kodowanie za pomocą ustawienia „kodowanie”. Zobacz :help encoding
iw :help fileencoding
Vimie, jak edytor obsługuje te ustawienia. Możesz także dodać kilka ustawień kodowania plików do swojego vimrc, aby vim spróbował wykryć na podstawie tych wymienionych.
Zauważ, że kodowanie plików nie jest wyraźnie określone nigdzie w pliku. Dlatego VIM i inne aplikacje muszą odgadnąć kodowanie. Kanonicznym sposobem na to jest
chardet
aplikacja, którą można uruchomić z poziomu VIM w następujący sposób:Odpowiedź dostarczona przez jtimberman pokazuje kodowanie bieżącego bufora, które może nie być tym samym kodowaniem co plik na dysku. W ten sposób zauważysz, że
chardet
czasami będzie wyświetlać inne kodowanie niż VIM, szczególnie jeśli masz skonfigurowany VIM, aby zawsze używał określonego kodowania (np. UTF-8).Zaletą
chardet
jest to, że daje ocenę pewności zgadywania, podczas gdy VIM może (i często ma) rację, zgadując kodowanie, jeśli nie ma wielu znaków powyżej \ x7F (ASCII 127). Na przykład dodanie pojedynczegoא
do długiego pliku kodu PHP powodujechardet
, że plik maISO-8859-2
pewność 0,72, podczas gdy dodanie nieco dłuższej frazyשלום, עולם!
daje UTF-8 z wynikiem ufności 0,99. W obu przypadkachset fileencoding?
pokazaneUTF-8
nie, ponieważ plik na dysku to UTF-8, ale ponieważ VIM jest skonfigurowany do wewnętrznego używania UTF-8.źródło
chardet <file>
. Mimo to dobra sugestia.Odkryłem, że: https://vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding
Możesz ponownie załadować plik przy użyciu innego kodowania, jeśli Vim nie był w stanie wykryć poprawnego kodowania:
gdzie
encoding
może byćcp850, ISO-8859-1, UTF-8, ...
Możesz użyć
file yourfilename
do znalezienia kodowania lubchardetect
(dostarczonegopython-chardet
lubuchardet
zależnie od twojej dystrybucji Linuksa), jak sugeruje dotancohen.źródło