如何在进入 Ruby 后覆盖当前控制台行?

How to overwrite the current console line after gets in Ruby?

我有这段代码:

def wait_for_input regex
  print "> ".red
  someInput = gets
  
  while (regex =~ someInput).is_a? NilClass do
    print "\r> ".red
    someInput = gets
    
    STDOUT.flush
  end
  
  someInput
end

回车符 return 应该覆盖控制台中的当前行,但 却没有,并且“>”进入新行。

我尝试从字符串(库colorize)中删除颜色并写入$stdout.flushSTDOUT.flushfollowing this topic运气不好.

然后我意识到 如果我删除 gets 指令

如何在gets之后覆盖当前行?

覆盖当前行(打印 "\r")与 gets 一起工作得很好。问题是,gets 读取一行直到(包括)换行符。因此,是您按下 ENTER,将光标移动到下一行。然后下一行,已经是空的,由 \r.

倒回

在常规模式下无法移动到上一行。(请参阅评论)您需要使用较低级别的终端window 访问。 curses 是一个流行的图书馆。 Ruby 有它的绑定。我建议您从这个博客 post(及其后续文章)开始:http://graysoftinc.com/terminal-tricks/random-access-terminal