我使用了 println!
打印了一些文本,现在我需要清除终端并写入新的文本,以替换旧文本。如何清除终端上的所有文本?
我尝试了这段代码,但它只清除了当前行,而 1
仍然在输出中。
fn main() {
println!("1");
print!("2");
print!("\r");
}
fn main() {
print!("{}[2J", 27 as char);
}
或者同时将光标定位于第 1
行,第 1
列:
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
print!("\x1B[2J");
。 - Pavel Strakhov\x1b[1;1H
!\x1b[2J
清除屏幕,\x1b[1;1H
将光标位置设置为(1;1) :) - somerandomdev49print!("\x1B[2J\x1B[1;1H");
这将清空屏幕并将光标置于屏幕的第一行和第一列。
\x1B[2J\x1B[1;1H
序列只会向下滚动终端,实际上它会隐藏内容而非清除内容。由于我想运行一个无限循环来重新呈现显示给用户的内容,这就是问题所在,因为我的终端窗口的滚动条每次“tick”时都会缩小。print!("{esc}c", esc = 27 as char);
这对我来说非常好用。对于我没有使用过的其他系统可能会有一些缺点,我不知道。
std::process::Command::new("clear").status().unwrap();
std::process::Command::new("cls").status().unwrap();
use std::{
error::Error,
process::Command,
};
fn main() -> Result<(), Box<dyn Error>> {
clear_terminal_screen();
println!("Hello World!");
Ok(())
}
如下:
pub fn clear_terminal_screen() {
if cfg!(target_os = "windows") {
Command::new("cmd")
.args(["/c", "cls"])
.spawn()
.expect("cls command failed to start")
.wait()
.expect("failed to wait");
} else {
Command::new("clear")
.spawn()
.expect("clear command failed to start")
.wait()
.expect("failed to wait");
};
}