Node.js多行输入

16

我想提示用户输入,让用户输入多行文本,在每一行之间按回车键,然后通过按CTRL + D或其他方式终止输入。

使用“keypress”,我可以捕获EOF,但我必须手动处理所有回显、退格处理、终端转义序列等。如果我能使用“readline”,但在其中使用“keypress”拦截CTRL + D(EOF),那将是更好的选择,但我不确定该怎么做。

2个回答

21

你可以使用 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
像 git 这样的命令也会打开一个默认编辑器供用户输入。Node.js 也能做到这一点吗? - Felix Jassler

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接