【问题标题】:Move one character to the left in the console在控制台中向左移动一个字符
【发布时间】:2012-05-03 02:28:59
【问题描述】:

在控制台中,您可以像这样打印"\b" 以擦除光标左侧的字符(退格)

print "the last char is going to be erased\b" # the last char is going to be erased

如何只向左移动一个位置而不是擦除(左箭头)?

【问题讨论】:

    标签: ruby console


    【解决方案1】:

    这取决于终端类型和连接,但您通常可以假设 ANSI 光标移动,因此光标左侧是 ESC + '[' + 'D':

    print "The cursor should be between the arrows: -> <-\e[D\e[D\e[D"
    readline
    

    更多信息请参见http://ascii-table.com/ansi-escape-sequences.php

    【讨论】:

    • 马克,我得到“光标应该在这里:> \b "' 给出 "The cursor should be here:"
    • Windows 不解释 ANSI 转义。我不认为我可以在 Windows 机器上开发。我会觉得自己一直在跳跃。
    • @Mark:它有挑战,但您的客户需要能够运行您的代码,因为大多数客户都有 Windows,这是最简单的方法。关于 ansi 的东西,有一些宝石可以让这成为可能,但我不愿意将这些用于如此简单的工作。毕竟如果 \b 有效(显然没有 ansi),为什么不应该有类似的东西来移动光标?
    • (彼得:最后一条评论来自@d11wtq,不是我)。恐怕 Windows 控制台不支持 ANSI 序列;退格之所以起作用,是因为本机模拟器可以直接理解它,而不是因为它被翻译成其他东西。您可以安装第三方控制台应用程序(Ansicon、Console...),或者直接调用 Win32 API 而不是回显字符(例如SetConsoleCursorPosition())。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多