Установите кодировку и кодировку файла на utf-8 в Vim

101

В чем разница между этими двумя командами?

  • set encoding=utf-8
  • set fileencoding=utf-8

Нужно ли мне устанавливать оба, когда я хочу использовать utf-8?

Кроме того, мне нужно установить кодирование файлов с помощью setили setglobal?

Киралы Золтан
источник
Обратите внимание, что безопаснее устанавливать кодировку в вашем LOCALE, а не в Vim, если вы редактируете файл, отличный от Unicode. Вы получите тот же результат, что и по умолчанию для LOCALE, и вы не испортите никаких посторонних символов, если они встретятся.
timss

Ответы:

93

TL; DR

В первом случае set encoding=utf-8вы измените кодировку вывода, отображаемую в терминале.

Во втором случае set fileencoding=utf-8вы измените кодировку вывода записываемого файла .

Как заявил @Dennis, вы можете установить их оба в своем ~ / .vimrc, если вы всегда хотите работать utf-8.

Подробнее

Из вики VIM о работе с юникодом

" encodingустанавливает, как vim должен представлять символы внутри . Utf-8 необходим для большинства разновидностей Unicode."

" fileencodingустанавливает кодировку для конкретного файла (локально в буфер);: setglobal устанавливает значение по умолчанию. Также можно использовать пустое значение: оно по умолчанию такое же, как 'кодировка'. Или вы можете захотеть установить одну из кодировок ucs, Это может сделать один и тот же файл на диске больше или меньше в зависимости от вашего конкретного сочетания символов. Кроме того, IIUC, utf-8 всегда имеет обратный порядок байтов (сначала старший бит), а ucs может быть прямым порядком байтов или прямым порядком байтов, поэтому, если вы используйте его, вам, вероятно, понадобится установить «бомбу» (см. ниже) ».

Адриан Лакруа
источник
3
Извините, я не понимаю. Что делает кодирование файлов точнее?
Киралы Золтан
25
В первом случае вы измените кодировку вывода, отображаемую в терминале. Во втором случае вы измените кодировку вывода записываемого файла.
Адриан Лакруа
1
+1 Короткий и приятный ответ, а не повторение официальной документации! :)
425nesp 09
При необходимости напрямую из командной строки vim -c "set encoding=utf-8" file.ext.
Ханс Гинзель,
87
set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

Вы также можете установить оба в своем, ~/.vimrcесли хотите всегда работать с utf-8.

Деннис
источник
0

Вы можете установить переменную 'fileencodings' в вашем .vimrc.

Это список кодировок символов, учитываемых при запуске редактирования существующего файла. При чтении файла Vim пытается использовать первую упомянутую кодировку символов. Если обнаружена ошибка, выполняется попытка следующей в списке. Когда обнаруживается работающая кодировка, устанавливается "fileencoding". Если все не удается, 'fileencoding' устанавливается в пустую строку, что означает, что используется значение 'encoding'.

Увидеть :help filencodings

Если вы часто работаете, например, с cp1252, вы можете добавить его туда:

set fileencodings=ucs-bom,utf-8,cp1252,default,latin9
Mike11
источник