如何在 Rust 中将彩色文本打印到终端?

Syl*_*act 48 terminal rust output

如何使用 Rust 将彩色文本输出到终端?我尝试使用在python 答案中找到的特殊转义字符,但它们只是按字面打印。这是我的代码:

fn main() {
    println!("\033[93mError\033[0m");
}
Run Code Online (Sandbox Code Playgroud)

Syl*_*act 75

您可以使用colored板条箱来执行此操作。这是一个简单的例子。具有多种颜色和格式:

use colored::Colorize;

fn main() {
    println!(
        "{}, {}, {}, {}, {}, {}, and some normal text.",
        "Bold".bold(),
        "Red".red(),
        "Yellow".yellow(),
        "Green Strikethrough".green().strikethrough(),
        "Blue Underline".blue().underline(),
        "Purple Italics".purple().italic()
    );
}
Run Code Online (Sandbox Code Playgroud)

颜色输出示例:

使用 Rust 在终端中显示彩色和格式化的文本

每个格式函数(red()italics()等)都可以单独使用,也可以与其他函数结合使用。但如果您将颜色相互组合使用,则仅显示最后设置的颜色。

  • 另外,我认为您不需要每次都使用 `format!` 宏 - 您只需在实际的 `&str` 上调用 `Colorize` 函数即可(例如 `"Bold".bold()` 可以代替 `格式!("粗体").bold()`) (4认同)
  • 另一个要检查的箱子是 https://lib.rs/crates/termcolor 及其包装器 https://lib.rs/crates/termcolor_output (免责声明 - 我创建了后者,但没有创建前者)。 (3认同)

Cha*_*man 58

Rust 没有八进制转义序列。您必须使用十六进制:

println!("\x1b[93mError\x1b[0m");
Run Code Online (Sandbox Code Playgroud)

另请参阅https://github.com/rust-lang/rust/issues/30491

发生的情况以及编译器没有抱怨的原因是,这\0 Rust 中的有效转义序列 - 并表示 NULL 字符(ASCII 代码 0)。只是 Rust 与 C(和 Python)不同,不允许您在此之后指定八进制数。因此它认为 是33要打印的普通字符。

  • 我刚刚在 Clippy 中提交了一个问题:https://github.com/rust-lang/rust-clippy/issues/7981 (3认同)