【问题标题】:How to clear the terminal screen in Rust after a new line is printed?打印新行后如何清除 Rust 中的终端屏幕?
【发布时间】:2016-04-22 13:52:44
【问题描述】:

我使用println! 打印了一些文本,现在我需要清除终端并写入新文本而不是旧文本。如何从终端清除所有当前文本?

我试过这段代码,但它只清除了当前行,1 仍在输出中。

fn main() {
    println!("1");
    print!("2");
    print!("\r");
}

【问题讨论】:

  • 这不是重复的!这是要求清除终端的方法。链接的“重复”是关于清除当前行。该问题还指出,清除当前行没有帮助。

标签: terminal rust


【解决方案1】:

您可以将控制字符发送到clear the terminal screen

fn main() {
    print!("{}[2J", 27 as char);
}

或者也可以position the cursor at row 1, column 1:

print!("{esc}[2J{esc}[1;1H", esc = 27 as char);

【讨论】:

  • 更简单的方法:print!("\x1B[2J");
  • @PavelStrakhov,虽然不会将光标定位到最顶部。但与第一个相比,它要简单得多。
【解决方案2】:
print!("\x1B[2J\x1B[1;1H");

这将清除屏幕并将光标放在屏幕的第一行和第一列。

【讨论】:

    【解决方案3】:

    赞成的答案提供的解决方案没有按我想要的方式工作。 \x1B[2J\x1B[1;1H 序列仅向下滚动终端,因此它实际上隐藏了内容并且不清除它。由于我想运行无限循环来重新渲染向用户显示的内容,这是一个问题,因为我的终端窗口的滚动条随着每个“滴答”而缩小。

    灵感来自 Clear a terminal screen for real 我正在使用

    print!("{esc}c", esc = 27 as char);
    

    这对我很有用。在我使用的其他系统(Ubuntu)上可能存在一些缺点,我不知道。

    【讨论】:

      【解决方案4】:

      在 Linux 或 macOS 终端试试这个:

      std::process::Command::new("clear").status().unwrap();
      

      在 Windows 1 中:

      std::process::Command::new("cls").status().unwrap();
      

      这基本上将“清除”命令发送到终端。

      【讨论】:

      • 这实际上并没有达到预期的效果。
      猜你喜欢
      • 2012-04-23
      • 2011-01-29
      • 2019-10-29
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2023-01-05
      相关资源
      最近更新 更多