使用 Ruby 删除多行终端输出

9

我希望能够将两行输出到终端并删除这两行内容。我知道可以通过类似下面的方式删除一行:

print "\b"*whatever

但我希望能够做出更像这样的东西:

[1, 2, 3, 4, 5].each do |item|
    # code to delete the previous two lines
    print item.to_s + "\nHello!"
end

输出将快速通过以下所有内容。
1
Hello!
2
Hello!
3
Hello!
4
Hello!
5
Hello!

但是到最后,你将只看到最终的迭代。
1个回答

17

对于简单的事情,如果你可以假设一个兼容ANSI的终端(通常是个好选择),你可以直接输出ANSI码。例如,

 5.times do |item|
    print "\r" + ("\e[A\e[K"*3) if item > 0
    puts "#{item+1}\nHello!"
 end

当使用 \r 时,光标会移动到行首;使用 \e[A 时,光标会向上移动一行;使用 \e[K 时,从光标位置清除到行尾。如果您不需要屏幕下方的任何内容,可以在光标到达所需位置后发送 \e[J,它会清除整个屏幕。

如果您需要更复杂的操作,可以先看看Highline gem


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接