使用ruby删除多行终端输出

JSh*_*hoe 4 ruby io command-line

我希望能够输出两行到终端,然后删除它们.我知道你可以做一件事

print "\b"*whatever
Run Code Online (Sandbox Code Playgroud)

但我想做更像这样的事情:

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

输出将快速完成以下所有操作

1
Hello!
2
Hello!
3
Hello!
4
Hello!
5
Hello!
Run Code Online (Sandbox Code Playgroud)

但到最后,最后的迭代就是你所看到的.

Mar*_*eed 11

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

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

\r光标移动到线的起点,\e[A将光标上移一行,并\e[K从光标位置到行的末尾被清除.如果屏幕上不需要任何其他内容,您也\e[J可以在光标所在的位置发送; 一直清除到屏幕的末尾.

对于更复杂的东西,你可以先看看Highline gem.