Как я могу установить кодировку по умолчанию VIM на UTF-8?

Я отправлю то, что я думаю, основные преимущества каждого:


Emacs имеет значительно больше расширений, чтобы позволить Вам сделать задачи, которые являются только неопределенно связанным текстовым редактором, как просмотр файловой системы или питание с управлением версиями и расширениями, которые никоим образом не являются связанным текстовым редактором, как чтение каналов RSS. Если Вы хотите среду вместо просто текстового редактора, Emacs будет лучше, чем Vim. Я также думаю, что Emacs намного легче изучить, несмотря на то, чему некоторые сделали бы, чтобы Вы верили:

Editor learning curve comic

В частности, я думаю, что пользователь новичка Emacs будет быстрее, чем пользователь Vim новичка


С другой стороны, Vim бесспорно быстрее. Кажется, что это - базовая часть аргумента, но по-моему нет никакого конкурса вообще; я считаю меня быстрым пользователем Emacs, и я не иду ни в какое сравнение с людьми пары, я знаю, что имеют равное знание Vim. Проблема, число людей, которые имеют достаточное мастерство Vim, чтобы быть, который быстро является невероятно маленьким (этих ~30 человек я регулярно говорю, кто использует Vim, я думаю, что только один исключительно хорош в нем). Существует большой разрыв между возможным выигрышем в быстродействии и усилением действительной скорости, которого Вы достигаете; пользователи Emacs собираются быть почти с такой скоростью, как 99% пользователей Vim, и (как я сказал в разделе Emacs), начинающие пользователи Emacs, вероятно, будут быстрее, чем начинающие пользователи Vim

63
27.10.2011, 17:42
2 ответа

Когда Vim читает существующий файл, он пытается обнаружить кодирование файла. При выписывании файла Vim использует файл, кодирующий это, он обнаружил (кроме тех случаев, когда Вы говорите его по-другому). Так файл, обнаруженный, поскольку, UTF-8 записан как UTF-8, файл, обнаруженный, как латинский 1 записан как латинский 1 и так далее.

По умолчанию процесс обнаружения сыр. Каждый файл, который Вы открываете с Vim, как будет предполагаться, будет латинский 1, если он не обнаружит метку порядка байтов Unicode наверху. Файл UTF-8 без метки порядка байтов будет трудно отредактировать, потому что любые многобайтовые символы покажут в буфере как последовательности символов вместо отдельных символов.

Хуже, Vim, по умолчанию, использует латинский 1 для представления текста в буфере. Таким образом, файл UTF-8 с меткой порядка байтов будет поврежден понижающим преобразованием к латинскому 1.

Решение состоит в том, чтобы настроить Vim для использования UTF-8 внутренне. Это, на самом деле, рекомендуется в документации Vim и единственной причине, она не настроена, тот выход из поля состоит в том, чтобы не создавать огромный беспорядок среди пользователей, которые ожидают, что Vim будет действовать в основном в качестве латинского 1 редактора.

В Вашем .vimrc, добавить set encoding=utf-8 и Vim перезапуска.

Или вместо этого, установите LANG переменная среды, чтобы указать, что UTF-8 является Вашей предпочтительной кодировкой символов. Это будет влиять не только на Vim, но и любое программное обеспечение, которое полагается LANG определить, как это должно представить текст. Например, чтобы указать, что текст должен появиться на английском языке (en), как говорится в Соединенных Штатах (US), закодированный как UTF-8 (utf-8), набор LANG=en_US.utf-8.

Теперь Vim будет использовать UTF-8 для представления текста в буфере. Плюс, это также приложит более решительное усилие для обнаружения кодировки UTF-8 в файле. Помимо поиска метки порядка байтов, это также проверит на UTF-8 без метки порядка байтов перед отступанием к латинскому 1. Таким образом, это больше не будет повреждать файл, кодированный в UTF-8, и это должно правильно отобразить символы UTF-8 во время сессии редактирования.

Для получения дополнительной информации о том, как Vim обнаруживает кодирование файла, посмотрите fileencodings опция в документации Vim.

Для получения дополнительной информации об установке кодирования, которое Vim использует внутренне, посмотрите encoding опция.

Если необходимо переопределить кодирование, используемое при обратной записи файла к диску посмотрите fileencoding опция.

66
27.01.2020, 19:32
  • 1
    На самом деле кажется, что я не должен даже потрудиться редактировать .vimrc; на самом деле значение по умолчанию кодирования является "latin1" или значением от $LANG, который в моей системе установлен на en_US.UTF-8. Поэтому :set encoding дает encoding=utf-8 из поля. Как ожидалось, если ЛЕНГ сброшен, :set encoding дает encoding=latin1. Спасибо за большой ответ! –  Paolo 27.10.2011, 23:39
  • 2
    Это могло бы быть обычно полезно, таким образом, я добавил его к ответу. –  MetaEd 28.10.2011, 18:59
  • 3
    Если Вы открываете файл, это кодируется как latin1, разве эта установка не изменит кодирование файла? Как можно заставить Vim сохранять кодирование файла неповрежденным, но предпочитать utf-8 для новых файлов? –  David Kennedy 06.02.2018, 19:46
  • 4
    @DaveKennedy Vim может рассматривать файл как латинский 1 только, когда файл является однозначно латинским 1. Когда кодирование неоднозначно, Vim должен выбрать. Например, файл, содержащий только 7-разрядные коды ASCII, является допустимым Latin1, но это - также допустимый UTF-8 и другие. Такой файл будут обычно рассматривать как UTF-8. Один способ избежать этого результата состоит в том, чтобы сделать файл, кодирующий однозначный. Прием, который я видел, должен добавить строку кодов 0xF7. В UTF-8 0xF7 недопустим. Но в латинском 1, это представляет знак деления (÷). Vim будет обычно приходить к заключению, что файл латинский 1. –  MetaEd 06.02.2018, 20:26

Согласно vimdoc попыткам энергии обнаружить автоматически кодирование файла, поэтому если Вы редактируете существующие файлы Вы shold быть хорошими.

Можно всегда вызывать кодирование, если Вы хотите с :set fileencodings=utf-8. Можно найти документацию здесь.

5
27.01.2020, 19:32
  • 1
    fileencodings=utf-8 заставит Vim распознавать входной файл как UTF-8, но затем выполнять преобразование с потерями в латинский 1. Плюс он заставит Vim не удаваться распознать UTF-16. Лучшее решение состоит в том, чтобы установить encoding=utf-8 который Vim поворотов от собственного однобайтового редактора в собственного многобайтового редактора. –  MetaEd 27.10.2011, 20:57
  • 2
    @MetaEd может Вы отвечать на это для разработки Проверенный :) –  hhh 30.01.2017, 09:56

Теги

Похожие вопросы