Як я можу змінити кодування файлу 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 ні vim.

1
Я б сказав, що декілька завантажень "просто встановити", навіть навіть портативне видання "є" легко доступним ".
Адріано Варолі П'яцца

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

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

52

Так само, як і ваші дії, налаштування кодування файлів має працювати. Однак я хотів би додати одну «встановлену бомбу», щоб допомогти редактору розглянути файл як UTF8.

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

8
Дякую за вашу відповідь, це змусило мене дізнатися більше про марку порядку байтів UTF. Однак FYI, встановлення BOM видається непотрібним / недоцільним для UTF-8, оскільки це не фіксований формат довжини байтів, як 16 або 32. Дивіться тут для пояснення та довідки. Це не проблема (і навіть корисна) для vim, я просто думав, що люди повинні просто усвідомлювати, що це може спричинити проблеми сумісності в інших місцях.
joelhardi

2
Це bombчи bom, і може бути unset? EDIT : Так, ви можете видалити його через set nobomb.
крижана вода

6
Так, VIm встановив нам bomb(з ab).
ruffin

за документами, :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.