Node JS REPL、Sockets 和 Telnet - Tab 补全、箭头键等

Posted

技术标签:

【中文标题】Node JS REPL、Sockets 和 Telnet - Tab 补全、箭头键等【英文标题】:Node JS REPL, Sockets, and Telnet - Tab Completion, Arrow Keys, etc 【发布时间】:2012-01-28 19:24:59 【问题描述】:

我一直在玩 Node 的 REPL。我认为通过 Socket 使其可用,通过 Telnet/puTTY/whatever 连接到它,并即时调试我的服务器会非常酷。

我使用了这里找到的示例:http://nodejs.org/docs/latest/api/repl.html,基本上看起来像这样......

net.createServer(function (socket) 
  var cmd = repl.start(">", socket);
  //... some other stuff here.... not important
).listen(5001);

好的,太好了!现在我可以使用 Telnet 连接到端口 5001 并与 REPL 交互。但是,我遇到了控制字符的问题(即 Tab、Ctrl+C、向上箭头、向下箭头等)。我怎样才能让这些工作?例如,如果我使用 telnet 连接,输入“1+1”,我得到 2。但是,当我点击“”时,我得到“...”,好像REPL 正在等待我完成命令。但是,实际上,我想做的只是查看我执行的最后一个命令。我知道 Telnet 喜欢在输入换行符之前保持其输出,但有什么方法可以避免这种情况吗?

$ telnet localhost 6634
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
>1+1
2
>^[[A
...

编辑:我也发现了这个问题,可能相关也可能不相关 - Arrow keys turn into control characters in Telnet

编辑 2:嗯...rlwrap 似乎解决了我的大部分问题:

$ rlwrap telnet localhost 6634

唯一不起作用的是局部/全局变量的制表符完成,我想我可以没有它。我最关心的是命令历史。 rlwrap很干净!

【问题讨论】:

【参考方案1】:

见上文。

rlwrap telnet localhost 6634

【讨论】:

你可以使用 -c -f 开关来模拟制表符完成:blog.lishman.com/2008/04/rlwrap.html 显然你需要一个 node.js 关键字列表

以上是关于Node JS REPL、Sockets 和 Telnet - Tab 补全、箭头键等的主要内容,如果未能解决你的问题,请参考以下文章

Node.js知识点整理之----REPL

Node的REPL环境

带有 vim 键绑定和方法/变量完成的 Node.js REPL

3. Node.js REPL(交互式解释器)

Node.js:将 repl 挂接到远程节点服务器

Node.js系列基础学习----安装,实现Hello World, REPL