Ответы:
Параметр fileencoding показывает кодировку текущего буфера:
:set fileencoding
fileencoding=utf8
На самом деле не существует общего способа определения кодировки открытого текста, поскольку эта информация не сохраняется в самом файле - за исключением файлов UTF-8, где у вас есть так называемая спецификация, которая обозначает кодировку. Вот почему файлы xml и html имеют метатеги charset.
Вы можете применить определенную кодировку с помощью параметра «кодировка». Смотрите :help encoding
и :help fileencoding
в Vim о том, как редактор обрабатывает эти настройки. Вы также можете добавить несколько настроек кодирования файлов в ваш vimrc, чтобы vim попытался определить их на основе перечисленных.
Обратите внимание, что кодировка файлов явно не указана нигде в файле. Таким образом, VIM и другие приложения должны угадать кодировку. Канонический способ сделать это с chardet
приложением, которое можно запустить из VIM следующим образом:
:!chardet %
Ответ, предоставленный jtimberman, показывает кодировку текущего буфера, которая может не совпадать с кодировкой файла на диске. Таким образом, вы заметите, что chardet
иногда будет отображаться кодировка, отличная от VIM, особенно если VIM настроен на постоянное использование определенной кодировки (т. Е. UTF-8).
Хорошая вещь в chardet
том, что он дает оценку достоверности для своего предположения, тогда как VIM может (и часто ошибается) ошибаться в предположении кодировки, если не много символов над \ x7F (ASCII 127). Например, добавление одного א
к длинному файлу кода PHP заставляет chardet
думать, что файл имеет ISO-8859-2
достоверность 0,72, тогда как добавление немного более длинной фразы שלום, עולם!
дает UTF-8 с показателем достоверности 0,99. В обоих случаях set fileencoding?
показывалось UTF-8
не потому, что файл на диске был UTF-8, а потому, что VIM настроен для внутреннего использования UTF-8.
chardet <file>
. Тем не менее, хорошее предложение.
Я обнаружил, что: https://vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding
Вы можете перезагрузить файл, используя другую кодировку, если Vim не смог определить правильную кодировку:
:e ++enc=<encoding>
где encoding
может бытьcp850, ISO-8859-1, UTF-8, ...
Вы можете использовать, file yourfilename
чтобы найти кодировку или chardetect
(предоставляемую python-chardet
или uchardet
зависящую от вашего дистрибутива Linux) в соответствии с предложением dotancohen.