节点 .js 多行输入

Node.js multiline input

提问人:Rich Remer 提问时间:10/14/2014 最后编辑:Gergo ErdosiRich Remer 更新时间:9/23/2023 访问量:11538

问:

我想提示用户输入,让用户输入多行文本,在每行之间按回车键,然后按 CTRL+D 或类似的东西终止输入。

通过“按键”,我可以捕获 EOF,但我必须手动处理所有回声、退格处理、终端转义序列等。如果我可以使用“readline”,但以某种方式用“keypress”拦截 CTRL+D (EOF) 会更好,但我不确定我该怎么做。

节点 .js 按键 读取行 eof 命令行界面

评论


答:

21赞 Gergo Erdosi 10/14/2014 #1

您可以使用 lineclose 事件:

var readline = require('readline');

var input = [];

var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.prompt();

rl.on('line', function (cmd) {

    input.push(cmd);
});

rl.on('close', function (cmd) {

    console.log(input.join('\n'));
    process.exit(0);
});

评论

1赞 Felix Jassler 6/26/2020
git 等命令还会打开一个默认编辑器供用户输入。这在 Node 上也可以吗?
2赞 Ulad Kasach 9/23/2023 #2

该软件包在这方面做得很好@inquirer/editor

它打开用户的默认编辑器进行输入

例如

import editor from '@inquirer/editor';

const story = await editor({
  message: "Tell me a story",
  waitForUseInput: true,
  postfix: '.md',
})

https://www.npmjs.com/package/@inquirer/editor