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


235

Я привык использовать 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, затем обновить и записать файл, и это работает», но мне, кажется, что-то не хватает, иначе он был сбит с толку. Я не знаю, что он имел в виду под «тогда обнови».

Ответы:



163

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

установить кодировку

и

установить кодирование файла

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


1
Спасибо! Apache выводил utf-8, так же как и php, как сказал браузер, так vim сказал set encoding, и все же на страницах были видны искаженные символы, которые были в порядке, как iso-8859-1. использование set fileencodingпоказало довольно «Latin1»
Адриано Вароли Пьяцца

77

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

Просто:

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

И вы сделали.


19
С другой стороны, iconv может быть недоступен в Windows.
Адриано Вароли Пьяцца

2
@AdrianoVaroliPiazza ни Вим.

1
Я бы сказал, что несколько «просто установочных» загрузок, даже с портативным изданием, «легко доступны»
Adriano Varoli Piazza

2
@ adriano-varoli-piazza Нет, iconv доступен в Windows вместе с Cygwin и MingW, как заметил @ coder-tim.
t0r0X

1
@mario Нет, Vim очень легко доступен в Windows: vim.org/download.php#pc
t0r0X

52

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

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

8
Спасибо за ваш ответ, это побудило меня узнать больше о метке порядка следования байтов UTF. Однако, к вашему сведению, установка спецификации кажется ненужной / нецелесообразной для UTF-8, так как это не фиксированный формат длины байта, как 16 или 32. Смотрите здесь для объяснения и ссылки. Это не проблема (и даже не полезно) для vim, я просто подумал, что люди должны просто знать, что это может вызвать проблемы совместимости в другом месте.
Джоэлхарди

2
Это bombили так bomи может быть unset? РЕДАКТИРОВАТЬ : Да, вы можете удалить его через set nobomb.
Ледяной воды

6
Да, VIm настроить нас bomb(с AB ).
Ёрш

согласно документам, :set bombвключается, если :set fenc=utf-8.. см.:he bomb
Эван Кэрролл

12
все наши базовые кодировки теперь принадлежат UTF-8
roblogic

6

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

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

См начиная , --cmd.


3
Первый вариант также должен работать на * nix оболочках. 'single quotes'нужны только для экранирования всех метасимволов, что обычно не то, что вы хотите.
jpaugh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.