此页面介绍了如何在 Rust 应用程序中使用 bat 作为库,允许开发者将 bat 的语法高亮和格式化功能集成到他们自己的项目中。有关使用 bat 命令行工具的信息,请参阅 概述 和 安装和使用。
可以通过将 bat crate 添加到项目的 Cargo.toml 中来将其用作库
请注意,您应该禁用默认功能(这些功能是为命令行应用程序设计的),并且只启用您需要的功能
您需要选择一个正则表达式引擎
regex-onig:使用 "oniguruma" 正则表达式引擎regex-fancy:使用纯 Rust 的 "fancy-regex" 引擎来源: Cargo.toml36-42
这是一个打印带语法高亮文件的简单示例
一个更完整的示例,展示了如何创建一个彩色的 cat 克隆
来源: examples/simple.rs1-7 examples/cat.rs1-14
来源: examples/simple.rs1-7 examples/cat.rs1-14 Cargo.toml41-43 Cargo.toml117-132 CHANGELOG.md129-132 CHANGELOG.md372-377
来源: Cargo.toml41-43 Cargo.toml117-132 CHANGELOG.md129-132 CHANGELOG.md372-377
PrettyPrinter 是将 bat 用作库的主要入口点。它提供了一种构建器样式的 API,用于配置输出格式。
// Create a new PrettyPrinter instance
let mut printer = PrettyPrinter::new();
// Configure the printer
printer
.header(true) // Show file headers
.grid(true) // Show grid borders
.line_numbers(true) // Show line numbers
.theme("Monokai") // Set the theme
.input_file("my_file.rs");
// Execute the printing operation
printer.print().unwrap();
来源: examples/simple.rs1-7 examples/cat.rs1-14
PrettyPrinter 支持以下样式组件,可以单独启用或禁用
| 组件 | 方法 | 描述 |
|---|---|---|
| 行号 | line_numbers(bool) | 显示/隐藏行号 |
| 网格 | grid(bool) | 显示/隐藏网格边框 |
| 标题 | header(bool) | 显示/隐藏文件头 |
| Header Filename | header_filename(bool) | 显示/隐藏文件名在头信息中 |
| Header Filesize | header_filesize(bool) | 显示/隐藏文件大小在头信息中 |
| Git Changes | vcs_modification_markers(bool) | 显示/隐藏 Git 修改标记 |
| Snip | snip(bool) | 显示/隐藏 snipped 标记 |
| 规则 | rule(bool) | 显示/隐藏水平分隔线 |
从 bat v0.25.0 开始,您可以添加或删除单个样式组件,而无需替换所有样式
来源: CHANGELOG.md49-50 CHANGELOG.md117-134
PrettyPrinter 提供了几种指定输入源的方法
| 方法 | 描述 |
|---|---|
input_file(path) | 打印单个文件 |
input_files(paths) | 打印多个文件 |
input_stdin() | 从标准输入读取 |
input_from_bytes(bytes) | 从字节数组读取 |
input_from_string(string) | 从字符串读取 |
来源: examples/simple.rs5 examples/cat.rs10 CHANGELOG.md173-175
要生成输出,请调用以下方法之一
| 方法 | 描述 |
|---|---|
print() | 打印到 stdout 或分页器 |
print_with_writer(writer) | 打印到自定义 writer |
print_with_writer 方法已在 v0.25.0 中添加,以便写入到自定义输出目的地。
来源: CHANGELOG.md132 examples/simple.rs5 examples/cat.rs11
使用语法定义
在 v0.25.0 版本中,语法相关的 API 发生了一些破坏性更改
HighlightingAssets::default_theme 已被移除。请使用 theme::default_theme。HighlightingAssets::syntaxes() 和 HighlightingAssets::syntax_for_file_name() 已被弃用。请使用 HighlightingAssets::get_syntaxes() 和 HighlightingAssets::get_syntax_for_path()。来源: CHANGELOG.md129-131 CHANGELOG.md372-374
SyntaxMapping 组件提供了一种将文件模式映射到语法定义的方法
v0.25.0 中的破坏性更改
SyntaxMapping::{empty,builtin} 已被移除;请使用 SyntaxMapping::new。SyntaxMapping::mappings 被 SyntaxMapping::{builtin,custom,all}_mappings 替换在 v0.25.0 版本中,添加了一个新的 theme::theme 函数,用于根据终端的颜色方案选择合适的主题。
该 bat 库使用自定义错误类型来报告错误。
该错误类型在 v0.25.0 中进行了更改
Error::SyntectError(syntect::LoadingError) 已更改为 Error::SyntectError(syntect::Error)Error::SyntectLoadingError(syntect::LoadingError) 枚举变体#[non_exhaustive],以便在不破坏语义版本的情况下添加新变体use bat::controller::Controller;
Controller::new()
// Configure controller
.run_with_error_handler(|error| {
// Custom error handling logic
eprintln!("Custom error handler: {}", error);
});
在 v0.25.0 中,错误处理程序已更改为 FnMut,以便在处理程序内修改状态。
来源: CHANGELOG.md127
您可以为 Controller::run() 提供可选的输出缓冲区
let mut buffer = Vec::new();
controller.run(&mut buffer)?;
来源: CHANGELOG.md174
当将 bat 用作库时,应禁用默认功能,只选择您需要的功能
| 功能 | 描述 | 用例 |
|---|---|---|
regex-onig | 使用“oniguruma”正则表达式引擎 | 建议用于完整的语法高亮功能 |
regex-fancy | 使用仅 Rust 的“fancy-regex”引擎 | 纯 Rust 替代品,依赖项更少 |
git | 启用 Git 集成 | 显示 Git 更改是必需的 |
paging | 启用分页功能 | 使用 less 等分页器是必需的 |
来源: Cargo.toml16-42
本节总结了您在升级时应注意的重要重大 API 更改
PrettyPrinter::print_with_writer 以用于自定义输出目标theme::theme 函数;移除了 HighlightingAssets::default_themeSyntaxMapping API 的更改Controller::run_with_error_handler 的错误处理程序已更改为 FnMutController::run() 和 Controller::run_with_error_handler() 添加了可选的 output_buffer 参数PrettyPrinter::header 正确显示带文件名的标题bat::PrettyPrinter::syntaxes() 现在迭代新的 bat::Syntax 结构#[non_exhaustive]Error::SyntectError 类型已更改InputDescriptionPrettyPrinter 提供 Inputs 的函数Input::theme_preview_file来源: CHANGELOG.md117-132 CHANGELOG.md172-174 CHANGELOG.md212 CHANGELOG.md253-255 CHANGELOG.md290-296 CHANGELOG.md372-377 CHANGELOG.md474-479 CHANGELOG.md553-558