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

如何在Node.js中监听终端的Command/Ctrl+L按键组合?

监听Command/Ctrl+L按键组合实现自定义清屏

嘿,刚好碰到过类似的需求,咱们直接上解决方案,一步步来实现你要的功能:

首先你猜的没错,确实要用到readline.emitKeypressEvents,不过得配合终端的原始模式才能捕获到组合键——不然系统会直接执行默认的清屏动作,轮不到咱们的代码处理。

完整实现代码

const readline = require('readline');

// 第一步:让终端进入原始模式,绕过系统默认按键处理,直接捕获所有按键
process.stdin.setRawMode(true);

// 第二步:启动readline的按键事件监听,把标准输入流转换成可触发keypress事件的流
readline.emitKeypressEvents(process.stdin);

// 第三步:监听keypress事件,判断是否是目标组合键
process.stdin.on('keypress', (str, key) => {
  // 匹配Mac的Command+L 或者 Windows/Linux的Ctrl+L
  if ((key.meta || key.ctrl) && key.name === 'l') {
    // 执行你的清屏逻辑
    process.stdout.write('\x1Bc');
    console.log('屏幕已清空!'); // 可选提示,不需要可以删掉
  }

  // 贴心小功能:按Ctrl+C退出程序,避免终端一直卡在原始模式
  if (key.ctrl && key.name === 'c') {
    // 退出前恢复终端正常模式(可选,但更严谨)
    process.stdin.setRawMode(false);
    process.exit();
  }
});

console.log('就绪!按 Command/Ctrl+L 清屏,按 Ctrl+C 退出');

关键知识点解释

  • process.stdin.setRawMode(true):这是核心!默认情况下终端会优先处理Command+L这类系统级快捷键,设置原始模式后,所有按键事件都会直接传递给我们的代码,不会被系统拦截。
  • readline.emitKeypressEvents(process.stdin):这个方法会给标准输入流添加keypress事件支持,让我们能监听每一次按键操作。
  • keypress事件的key对象:包含按键的详细信息:
    • key.meta:对应Mac上的Command键
    • key.ctrl:对应Windows/Linux上的Ctrl键
    • key.name:按键的名称(这里是小写的l,注意区分大小写)

注意事项

  • 直接用Node.js运行脚本即可,比如node clear-screen.js
  • 如果程序异常退出,可能导致终端卡在原始模式,此时可以按Ctrl+D或重启终端恢复正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:55