Как преобразовать вывод консоли Windows в utf8 в VIM - PullRequest
0 голосов
/ 03 марта 2019

Я хочу выполнить системную команду из gvim и получить выходные данные этой команды в текущем буфере.Поэтому я запускаю следующую команду в gvim:

:r echo éèà

Однако результат показывает три черных квадрата вместо отображаемых символов.Я еще не выяснил, что делать, чтобы заставить это работать.У меня есть следующие настройки кодировки:

set encoding=utf8
set termencoding=cp850

Моя консоль для Windows - cp850.

1 Ответ

0 голосов
/ 14 марта 2019

TL; DR

:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252

Допущения

Мне удалось воспроизвести вашу проблему на моем компьютере с Windows 10 с помощью gvim 7.4, установленный через установщик Windows для gvim.

У меня также есть cygwin на моей машине, на котором у меня iconv, и его полный путь c:\gygwin\bin\iconv.

Предложенорешение

По-видимому, gvim ожидает, что вывод оболочки Windows будет в cp1252, потому что это сработало для меня:

:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252

Я проверил результаты, и Vim правильно вставил utf-8 символов для символа в моем документе.

У меня нет эквивалента iconv, который является родным для Windows, но если у вас есть Cygwin, вы можете добавить c:\cygwin\bin в путь к Windows, и команда должнане требует явного пути.

Эпилог

Гадость.Это безобразноРешение работает, по крайней мере, на моей машине, но я надеюсь, что кто-то найдет и разместит более элегантное решение.

Должен быть способ сообщить gvim, какую кодировку ожидать от оболочки, но я не нашелЭто.Я играл с различными комбинациями настроек encoding, termencoding и fileencoding вместо использования iconv, но только получал разные неверные результаты.

Эти связанные вопросы сталкивались с похожими проблемами, но их решенияв моих тестах тоже не работало:

Проблема связана с несовпадением кодировки символов между cmd.exe (по умолчанию :set shell в vim на Windows) и что ожидает gvim.Я не знаю, почему изменение :set termencoding не решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...