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

如何通过Node.js从命令行提示符获取坐标?及命令行尺寸咨询

Node.js 获取命令行光标坐标与窗口尺寸

一、获取命令行窗口的宽高

Node.js 里直接通过 process.stdout 就能拿到窗口的尺寸数据:

  • process.stdout.columns:窗口宽度(按字符数计算)
  • process.stdout.rows:窗口高度(按行数计算)

简单示例:

console.log(`当前窗口宽度:${process.stdout.columns}`);
console.log(`当前窗口高度:${process.stdout.rows}`);

如果需要实时监听窗口尺寸变化,绑定 resize 事件即可:

process.stdout.on('resize', () => {
  console.log(`窗口尺寸更新:宽 ${process.stdout.columns} / 高 ${process.stdout.rows}`);
});

二、获取光标当前坐标

Node.js 没有直接提供光标位置的API,得用终端的ANSI控制序列来查询。原理是发送查询指令,再捕获终端返回的结果解析:

const readline = require('readline');

// 配置终端为原始模式,避免自动回显和换行
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);

// 发送ANSI查询光标位置指令:\x1B[6n
process.stdout.write('\x1B[6n');

process.stdin.on('data', (data) => {
  // 终端返回的格式是 \x1B[行号;列号R,用正则解析
  const result = data.toString().match(/^\x1B\[(\d+);(\d+)R$/);
  if (result) {
    const row = parseInt(result[1], 10);
    const col = parseInt(result[2], 10);
    console.log(`当前光标位置:行 ${row},列 ${col}`);
    
    // 恢复终端正常模式并退出
    process.stdin.setRawMode(false);
    process.exit();
  }
});

这段代码在Windows、Linux、macOS上都能运行,前提是你的终端支持ANSI控制序列(大部分现代终端都支持)。

三、获取命令行提示符的长度

提示符的内容由当前Shell的配置决定(比如bash的PS1环境变量),Node.js里可以通过process.env.PS1拿到。注意很多提示符会带颜色等ANSI转义序列,这些不会显示,要先去掉再算真实长度:

const rawPrompt = process.env.PS1 || '';
// 去除所有ANSI格式转义序列
const visiblePrompt = rawPrompt.replace(/\x1B\[[0-9;]*m/g, '');
console.log(`提示符可见长度:${visiblePrompt.length}`);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:15