【问题标题】:How do you edit existing text (and move the cursor around) in the terminal?如何在终端中编辑现有文本(并移动光标)?
【发布时间】:2012-05-22 01:49:51
【问题描述】:

我曾经看过这个演示,它打印出一段文本(就像你在输入 some-command --help 时得到的那样),然后它跳回到文本中的几个关键字并更改了文本颜色,在它已经在终端中打印出来之后

这对我来说似乎很疯狂。他们是怎么做到的?

开始考虑,我猜stdoutstdin 在技术上是一个“IO 流”,所以也许这是一个跟踪光标位置的持久变量?我记得在构建语言解析器时做过类似的事情。

目标是这样的:假设您在控制台中输入以下内容,它会输出一个空白数组,因为在 Node.js 中,它都是异步的,我们不想每次都在控制台中编写异步函数:

$ node app.js
> App.User.all()
=> []

然后当异步回调执行时,您返回并编辑=> [] 以包含结果:

$ node app.js
> App.User.all()
=> [#<User id:1>, #<User id:2>...]

即使有很多其他问题需要解决(与这个问题无关。我知道你可以定义一个全局回调并执行类似App.User.all(_c) 的操作) .

在终端输出已经打印后如何编辑它?

【问题讨论】:

    标签: node.js terminal stdout


    【解决方案1】:

    终于找到了“demo”:

    【讨论】:

    • 还需要注意的是,最后 2 个代码(保存光标位置和恢复光标位置)并非所有地方都支持。如您提供的第二个来源所述:The latter two codes are NOT honoured by many terminal emulators. The only ones that I'm aware of that do are xterm and nxterm - even though the majority of terminal emulators are based on xterm code.
    • 不能在模板字符串或严格模式下使用,但您可以将八进制 \033 替换为十六进制 \x1b 或 unicode \u001b
    【解决方案2】:

    如果您在 Mac OS X 中工作,我相信 Eddie 程序会执行类似“在终端输出已打印后编辑终端输出”之类的操作。 (参见“维基百科的 Eddie(文本编辑器)”)。

    在文件菜单下,选择“新建”,然后在“设置/文档设置...”下选择“Shell Window”。之后尝试几个 unix 命令:date、ls、cal 等。然后放置光标并编辑这些命令。

    我会尝试使用 Node,但我无法在 Mac OS X 10.5.8 下安装它(Node)。

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 1970-01-01
      • 2017-09-04
      • 2014-08-28
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多