提问者:小点点

在原始模式下使用child_process.spawn()打开VIM会导致它冻结


请注意以下脚本:

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();
});

它设置原始模式,然后在vim上打开readme.md。 键入几秒钟后,VIM完全停止响应。 按键什么也不做,恢复的唯一方法就是关闭标签。 通过移除on(“data”)回调来解决这个问题。 我正在macOS Catalina上使用iTerm,节点版本V13.10.1。 是这个脚本错了,还是这是Node.js,VIM或者也许是Iterm上的一个bug?


共1个答案

匿名用户

这似乎是在process.stdin.on(“data”)处于活动状态时引起的,这导致Node.js挂起等待输入。 这可以通过在生成子进程之前使用process.stdin.pause来解决,然后使用process.stdin.resume继续侦听child.on(“exit”)内部的内容。