Vim забывает, как использовать левую клавишу со стрелкой, когда вызывается как подпроцесс. Как исправить? - PullRequest
0 голосов
/ 27 августа 2018

Я недавно написал некоторый код golang, который запускает "git commit" как подпроцесс. Git по очереди вызывает vim как подпроцесс, чтобы я мог редактировать сообщение коммита. Тем не менее, я считаю, что когда vim выполняется таким образом, клавиша возврата не работает должным образом. После фиксации вывод терминала поврежден, как будто у некоторого компонента есть отслеживание количества столбцов в строке. Это последнее поведение исправлено с помощью команды сброса.

В выводе появляется очень интересная подсказка:

Vim: Warning: Input is not from a terminal

Похоже, что информация терминала не передается в подпроцесс.

У меня нет этих проблем, когда я использую vim напрямую или когда я запускаю git commit непосредственно в командной строке. Есть ли у вас какие-либо идеи о том, как я могу устранить неполадки и устранить эту проблему?

Я использую vim 8.1 на Mac:

VIM - Vi IMproved 8.1 (2018 May 18, compiled Aug  9 2018 16:08:01)
macOS version
Included patches: 1-235
Compiled by Homebrew
Huge version with MacVim GUI.  Features included (+) or not (-)...

Моя программа golang не изменяет переменную Cmd.Env объекта exec.Cmd. Когда я запускаю «which vim» в golang через exec.Command («which», «vim»), я могу подтвердить то же местоположение, что и в командной строке. Тем не менее, я понимаю, что git commit не обязательно найдет то же место для vim.

Мой .gitconfig содержит:

[core]
editor = vim

но я не вижу ничего другого, что, очевидно, изменило бы поведение редактора.

1 Ответ

0 голосов
/ 28 августа 2018

Решением было установить cmd.Stdin явно:

cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
cmd.Stdin  = os.Stdin

У меня были настройки stderr и stdout, но я не знал, что необходимо также настроить stdin. Некоторые подробности, объясняющие, почему это так, приведены здесь .

...