Подтвердить что ты не робот

Как правильно настроить vim для редактирования в utf-8

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

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

4b9b3361

Ответ 1

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

Ответ:

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, потому что в соответствии с 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. Таким образом, это имеет значение только для новых файлов. И в соответствии с docs:

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

Ответ 2

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

Остальное должно быть довольно приличным по размеру

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