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