Как изменить кодировку файла с помощью vim?

Я использую vim для изменения окончаний строки файла:

$ file file
file: ASCII text, with CRLF line terminators
$ vim file
:set ff=mac
:wq
$ file file
file: ASCII text, with CR line terminators

Можно ли использовать аналогичный процесс для изменения кодировки в формате Unicode? Я пытаюсь сделать следующее, что не работает:

$ file file.xml
file.xml: Unicode text, UTF-16, little-endian
$ vim file
:set encoding=utf-8
:wq
$ file file.xml
file.xml: Unicode text, UTF-16, little-endian

Я видел кто-то сказал, что он может "установить fileencoding = utf-8, а затем обновить и записать файл, и он работает", но Кажется, мне что-то не хватает, иначе он был в замешательстве. Я не знаю, что он имел в виду под "затем обновлением".

Ответ 1

Из doc:

: write ++ enc = utf-8 russian.txt

Итак, вы должны иметь возможность изменить кодировку как часть команды записи.

Ответ 2

Обратите внимание, что существует разница между

set encoding

и

set fileencoding

В первом случае вы измените кодировку вывода, которая отображается в терминале. Во втором случае вы измените выходную кодировку записываемого файла.

Ответ 3

При использовании vim делать это вполне возможно, почему бы вам просто не использовать iconv? Я имею в виду - загрузка текстового редактора просто для преобразования кодировки, похоже, с использованием слишком большого молотка для слишком маленького гвоздя.

Просто:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml

И все готово.

Ответ 4

Как и ваши шаги, настройка файлового кодирования должна работать. Тем не менее, я хотел бы добавить один "набор бомб", чтобы помочь редактору рассмотреть файл как UTF8.

$ vim file
:set bomb
:set fileencoding=utf-8
:wq

Ответ 5

Может быть полезно изменить encoding только в командной строке перед чтением файла:

rem On MicroSoft Windows
vim --cmd "set encoding=utf-8" file.ext
# In *nix shell
vim --cmd 'set encoding=utf-8' file.ext

См. starting, --cmd.