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 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:
:!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 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 powoduje chardet
, że plik ma ISO-8859-2
pewność 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-8
nie, 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 encoding
może byćcp850, ISO-8859-1, UTF-8, ...
Możesz użyć file yourfilename
do znalezienia kodowania lub chardetect
(dostarczonego python-chardet
lub uchardet
zależnie od twojej dystrybucji Linuksa), jak sugeruje dotancohen.