使用ruby删除多行终端输出

时间:2013-02-19 23:18:54

标签: ruby command-line io

我希望能够向终端输出两行,然后删除它们。我知道你可以做一些像

这样的事情
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 个答案:

答案 0 :(得分:11)

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

 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;一直清除到屏幕的末尾。

对于更复杂的内容,您可以先查看the Highline gem