Потому что Vim является текстовым редактором и работает с текстовыми кодовыми точками, а не байтами. Происходит более одного перевода - при открытии файла редактор должен декодировать его из байтовой кодировки во внутреннее представление (обычно Unicode); при сохранении обратно в файл или при отображении его содержимого на терминале редактор должен закодировать текст обратно в байты.
Одна из причин этого проста - файл и терминал могут использовать разные наборы символов. Например, вы редактируете некоторые старые документы в ISO 8859-13 или KOI8-R и хотите, чтобы они правильно отображались на терминале UTF-8.
Вторая причина, опять же, заключается в том, что текстовые редакторы работают с текстом. Например, ”
- это один символ, а его ширина равна одной терминальной ячейке, независимо от ее байтовой кодировки (3 байта в UTF-8, 1 байт в Windows-1257, 2 байта в Shift-JIS и т.д.). Если Vim просто посчитал его как три байта, а терминал показал его как один, это привело бы к смещению вертикальных разбиений, слишком раннему переносу строк, появлению слишком узких вкладок и т.д.
Instead of this... ...you would see this.
┌───────────────────────────┐ ┌───────────────────────────┐
│She said, "Hello." │ │She said, "Hello." │
│ │ │ │
│She said, “Hello.” │ │She said, “Hello.” │
│ │ │ │
│Ji pasakė, „Sveiki“. │ │Ji pasakė, „Sveiki“. │
└───────────────────────────┘ └───────────────────────────┘
Не говоря уже о том, что вам придется трижды нажимать клавишу Backspace, чтобы удалить один символ.