Как правильно настроить vim для редактирования в utf-8 - PullRequest
22 голосов
/ 29 марта 2011

Я несколько раз сталкивался с проблемами, потому что кодировка vim по умолчанию была установлена ​​на latin1, и я не заметил и предположил, что он использует utf-8.Теперь, когда у меня есть, я хотел бы настроить vim так, чтобы он работал правильно во всех очевидных случаях, и использовать utf-8 по умолчанию.

Чего я хотел бы избежать:

  • Принудительное сохранение файла, сохраненного в другой кодировке , который работал бы до моих изменений , как utf-8, что приводило к бреду.
  • Принуждение терминала, который не поддерживает многобайтовые символы (например, Windows XP), попытаться все равно отобразить их, что приведет к бреду.
  • Вмешательство в способность других программ читать или редактировать файлы (у меня есть(возможно, неоправданное) отвращение к использованию спецификации по умолчанию, потому что мне неясно, насколько велика вероятность испортить другие программы.)
  • Другие проблемы, о которых я не знаю достаточно, чтобы догадаться (но, надеюсь,Вы делаете!)

То, что у меня есть до сих пор:

if has("multi_byte")
  if &termencoding == ""
    let &termencoding = &encoding
  endif
  set encoding=utf-8                     " better default than latin1
  setglobal fileencoding=utf-8           " change default file encoding when writing new files
  "setglobal bomb                        " use a BOM when writing new files
  set fileencodings=ucs-bom,utf-8,latin1 " order to check for encodings when reading files
endif

Это взято и немного изменено из vim wiki .Я переместил bomb из setglobal fileencoding в собственное утверждение, потому что в противном случае оно на самом деле не работает.Я также прокомментировал эту строку из-за моей неуверенности в отношении спецификаций.

Что я ищу:

  • Возможные ловушки, чтобы избежать того, что я пропустил
  • Проблемы с существующим кодом
  • Ссылки на те места, где это уже обсуждалось / изложено

В конечном счете, я бы хотел, чтобы это привело к неосмысленномутребуется фрагмент копирования / вставки, который настроит vim для utf-8-по-умолчанию, который будет работать на разных платформах.

РЕДАКТИРОВАТЬ: Я отметил свой собственный ответ как принятый на данный момент,насколько я могу судить, все работает нормально и учитывает все, на что он может разумно объяснить.Но это не в камне;Если у вас есть какая-либо новая информация, пожалуйста, ответьте!

Ответы [ 2 ]

24 голосов
/ 26 апреля 2011

В ответ на sehe я попробую ответить на свой вопрос!Я удалил обновления, внесенные в исходный вопрос, и переместил их в этот ответ.Это, вероятно, лучший способ сделать это.

Ответ:

if has("multi_byte")
  if &termencoding == ""
    let &termencoding = &encoding
  endif
  set encoding=utf-8                     " better default than latin1
  setglobal fileencoding=utf-8           " change default file encoding when writing new files
endif

Я удалил строку bomb, потому что согласно спецификации Википедииpage он не нужен при использовании utf-8 и фактически побеждает обратную совместимость ASCII.Пока ucs-bom является первым в fileencodings, vim сможет обнаруживать и обрабатывать существующие файлы с помощью спецификаций, поэтому для этого он и не нужен.

Я удалил строку fileencodings, потому что онане нужен в этом случае.Из Vim docs : When 'encoding' is set to a Unicode encoding, and 'fileencodings' was not set yet, the default for 'fileencodings' is changed.

Я использую setglobal filencoding (в отличие от set fileencoding), потому что: При чтении файла fileencoding будет автоматически установлен на основеfileencodings.Так что это важно только для новых файлов.И в соответствии с документами снова:

Для нового файла используется глобальное значение 'fileencoding'.

2 голосов
/ 29 марта 2011

Я думаю, что было бы достаточно иметь ванильный vimrc + fenc = utf-8

Все остальное должно быть довольно прилично из коробки

Я бы использовал спецификациютолько на платформах Windows с инструментами Microsoft (хотя даже некоторые из них не всегда пишут спецификации; однако это значение по умолчанию для сохранения в Unicode Блокнота, .NET XmlWriter и других центральных точек инструментов платформы MS)

...