在Rust中打印新行后如何清除终端屏幕?

eqfvzcg8  于 2023-02-23  发布在  其他
关注(0)|答案(5)|浏览(295)

我已经用println!打印了一些文本,现在我需要清除终端并写入新文本而不是旧文本。我如何从终端清除所有当前文本?
我试过这段代码,但它只清除了当前行,1仍然在输出中。

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

vshtjzan1#

您可以将控制字符发送到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);
oxalkeyp

oxalkeyp2#

print!("\x1B[2J\x1B[1;1H");

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

ctzwtxfj

ctzwtxfj3#

投票通过的答案提供的解决方案并没有按照我想要的方式工作。\x1B[2J\x1B[1;1H序列只能向下滚动终端,所以它实际上隐藏了内容,并没有清除它。因为我想运行一个无限循环,重新呈现显示给用户的内容,这是一个问题,因为我的终端窗口的滚动条随着每一个“滴答”而缩小。
灵感来自我正在使用的Clear a terminal screen for real

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

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

zpqajqem

zpqajqem4#

在Linux或macOS终端中尝试以下操作:

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

在Windows中:

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

这基本上是向终端发送“清除”命令。

rsaldnfx

rsaldnfx5#

use std::process::Command;

// Clear the terminal screen:

if cfg!(target_os = "windows") {
    Command::new("cls").status().unwrap();
} else {
    Command::new("clear").status().unwrap();
};

相关问题