Использование child_process.spawn () для открытия VIM в необработанном режиме приводит к его зависанию - PullRequest
0 голосов
/ 16 июня 2020

Обратите внимание на следующий сценарий:

const child_process = require('child_process');

process.stdin.setRawMode(true);
process.stdin.on("data", (data) => {});

var child = child_process.spawn("vim", ["README.md"], {stdio: "inherit"});
child.on("exit", (e, code) => {
  process.exit();
});

Он устанавливает исходный режим, а затем открывает README.md на vim. Через несколько секунд VIM полностью перестает отвечать. Нажатие клавиш ничего не делает, и единственный способ восстановить - закрыть вкладку. Эта проблема решается удалением обратного вызова on("data"). Я использую iTerm на macOS Catalina, версия узла v13.10.1. Это неправильный сценарий, или это ошибка Node.js, VIM или, возможно, iTerm?

1 Ответ

0 голосов
/ 16 июня 2020

Похоже, это происходит, когда активен process.stdin.on("data"), что заставляет Node.js зависать в ожидании ввода. Это можно решить, используя process.stdin.pause перед порождением дочернего процесса, а затем используя process.stdin.resume для продолжения прослушивания внутри child.on("exit").

...