Odpowiedzi:
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 encodingiw :help fileencodingVimie, 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 chardetaplikacja, którą można uruchomić z poziomu VIM w następujący sposób:
:!chardet %
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 chardetczasami 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ą chardetjest 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 powoduje chardet, że plik ma ISO-8859-2pewność 0,72, podczas gdy dodanie nieco dłuższej frazy שלום, עולם!daje UTF-8 z wynikiem ufności 0,99. W obu przypadkach set fileencoding?pokazane UTF-8nie, ponieważ plik na dysku to UTF-8, ale ponieważ VIM jest skonfigurowany do wewnętrznego używania UTF-8.
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:
:e ++enc=<encoding>
gdzie encodingmoże byćcp850, ISO-8859-1, UTF-8, ...
Możesz użyć file yourfilenamedo znalezienia kodowania lub chardetect(dostarczonego python-chardetlub uchardetzależnie od twojej dystrybucji Linuksa), jak sugeruje dotancohen.