如何在Node.js REPL中对输入文本进行语法高亮显示



这在Linux终端中是可能的,因为有一些类似shell的fish对输入文本使用不同的高亮显示。有可能在Node.js中有这样的东西吗?或者我需要用这个功能重新实现readLine库吗。

有人知道如何在Node.js中做到这一点吗?我在GitHub上检查fish的代码,似乎该项目使用了NCurses。我可以在Node.js中做同样的操作,在输入文本为彩色的情况下使用REPL吗?

编辑

我已经从@MehdiBelbal解决方案测试了这个代码:

var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.question("lips> ", function(code) {
  console.log('ncode is ' + code);
  rl.close();
});
rl._writeToOutput = function _writeToOutput(stringToWrite) {
    rl.output.write(stringToWrite.replace(/define/g, 'u001b[1;34mdefinex1b[0m'));
};

但它不会突出显示define这个词,你需要键入空格(或任何字符(,然后用退格删除它。

您可以通过重写_writeToOutput方法来实现这一点'\x1b[31m'是控制台红色unicode您需要添加'\x1b[0m'是重置,颜色必须停在这个位置:

rl._writeToOutput = function _writeToOutput(stringToWrite) {
    rl.output.write('x1b[31m'+stringToWrite+'x1b[0m');
};

颜色Unicode:

Black: u001b[30m.
Red: u001b[31m.
Green: u001b[32m.
Yellow: u001b[33m.
Blue: u001b[34m.
Magenta: u001b[35m.
Cyan: u001b[36m.
White: u001b[37m.

代码示例:

var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.question("code: ", function(code) {
  console.log('ncode is ' + code);
  rl.close();
});
// force trigger of _writeToOutput on each keystroke
process.stdin.on('keypress', (c, k) => {
    // setTimeout is needed otherwise if you call console.log
    // it will include the prompt in the output
    setTimeout(() => {
        rl._refreshLine();
    }, 0);
});
rl._writeToOutput = function _writeToOutput(stringToWrite) {
    rl.output.write(stringToWrite.replace(/define/g, 'u001b[1;34mdefinex1b[0m'));
};

类型";定义";穿蓝色的。

如果你指的是控制台,我可以建议扩展Chalk。使用粉笔的示例:

const chalk = require("chalk");
//...
console.log(chalk.red("Red text, ") + "normal text");

这将记录";红色文本,";红色。

最新更新