You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS/Node.js中隐藏控制台光标且不改变其位置?

Node.js 中隐藏控制台光标且不改变位置的实现方案

经过测试,我们可以通过ANSI转义序列\u001B[?25l(隐藏光标)和\u001B[?25h(恢复光标)实现需求,同时避免光标位置异常问题。以下是两种可靠的实现方式:

方法一:使用readline接口直接写入ANSI序列

通过Node.js内置的readline模块写入转义序列,既能保证光标隐藏/恢复时位置不变,也能在VS Code集成终端中正常工作。若在隐藏期间移动光标,恢复后光标会回到正确位置。

代码示例:

// ES模块(*.mjs 或 package.json中设置"type": "module")
import readline from 'readline';
// 或 CommonJS模块
// const readline = require('readline');

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

rl.write('\u001B[?25l'); // 隐藏光标
// 可在此执行光标移动操作,比如:
// readline.moveCursor(process.stdout, 2, 0);
rl.write('\u001B[?25h'); // 恢复光标

方法二:使用cli-cursor npm包

cli-cursor包封装了上述ANSI转义序列,使用更简洁,效果与直接写入序列完全一致,同样能保持光标位置。

代码示例:

// ES模块
import cliCursor from 'cli-cursor';
// 或 CommonJS模块
// const cliCursor = require('cli-cursor');

cliCursor.hide(); // 隐藏光标
// 可在此执行光标移动操作
cliCursor.show(); // 恢复光标

注:ansi-escapes包原理类似,推测也能实现相同效果(未验证)。

注意事项

若使用console.log()替代rl.write()来写入转义序列,由于console.log()每次调用都会添加新行,会导致光标位置偏移,此时需要调用readline.moveCursor(process.stdout, 0, -2)来修正位置。

内容的提问来源于stack exchange,提问作者Darkosphere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:27:26