本文档介绍了 ripgrep 如何处理和管理命令行参数以配置搜索操作。它涵盖了 CLI 系统的架构、标志的定义、解析和转换为搜索参数,以及 ripgrep 如何与终端和配置文件进行交互。
有关 ripgrep 搜索功能的信息,请参阅 核心搜索引擎。
Ripgrep 的 CLI 处理遵循从用户输入到搜索执行的明确流程。
该过程始于用户使用各种参数运行 ripgrep。这些参数以及配置文件(如果存在)中的参数会被解析为一个低级表示(LowArgs)。然后将其转换为高级表示(HiArgs),该表示处理派生设置和默认值。HiArgs 结构用于配置执行实际搜索操作的各种组件。
来源: crates/core/flags/hiargs.rs35-105 crates/core/flags/hiargs.rs108-139
Ripgrep 使用结构化方法定义和处理命令行标志。
ripgrep 中的每个标志
Flag 特性的 Rust 结构。-A)、长名称(例如 --after-context),以及可选的否定形式(例如 --no-binary)。update() 方法,该方法会修改一个 LowArgs 实例。所有标志都收集在一个名为 FLAGS 的常量数组中,该数组决定了它们在生成文档(例如 man 页、帮助文本)中的顺序。
来源: crates/core/flags/defs.rs1-38 crates/core/flags/defs.rs39-152 crates/core/flags/defs.rs154-190
在将命令行参数解析为 LowArgs 结构后,ripgrep 将其转换为更高级的 HiArgs 结构,该结构解析默认值、处理相互依赖性并表示最终的搜索配置。
转换过程
--vimgrep 暗示 --column)。HiArgs 结构提供了创建搜索操作的适当配置组件的方法,例如 searcher()、matcher() 和 printer() 方法。
来源: crates/core/flags/hiargs.rs108-320 crates/core/flags/hiargs.rs355-739
Ripgrep 支持从 RIPGREP_CONFIG_PATH 环境变量指定的配置文件读取配置。
配置文件格式有意保持简单。
# 开头的行(带有可选空格)将被忽略作为注释。这样用户就可以定义默认设置,同时仍然能够在命令行中覆盖它们。
来源: crates/core/flags/doc/template.rg.1258-348
Ripgrep 会根据其输入/输出流是否连接到终端来调整其行为。
这种自动配置确保了:
Ripgrep 使用特定于平台的启发式方法来确定 stdin 是否可读,根据平台检查文件、管道、FIFO 或套接字。
来源: crates/cli/src/lib.rs152-249 crates/core/flags/hiargs.rs140-220
Ripgrep 为各种 shell 提供了 shell 补全脚本。
这些补全脚本通过在键入 ripgrep 命令时建议可用的标志和选项来帮助用户。可以使用 --generate 标志生成它们。
rg --generate=complete-bash
rg --generate=complete-zsh
rg --generate=complete-fish
rg --generate=complete-powershell
补全系统了解 ripgrep 的标志类别,并可以提供上下文相关的补全,例如为 --type 标志建议文件类型。
来源: crates/core/flags/complete/fish.rs1-68 crates/core/flags/complete/zsh.rs1-23 crates/core/flags/complete/mod.rs1-11
Ripgrep 提供处理各种类型输入的实用工具。
Ripgrep 提供处理模式的实用工具。
pattern_from_os():将 OS 字符串转换为 UTF-8 模式,并提供有用的错误消息。patterns_from_path():从文件中读取模式,每行一个。patterns_from_stdin():从标准输入读取模式,每行一个。这些实用工具确保了正确的 UTF-8 处理,并在遇到无效 UTF-8 时提供有用的错误消息。
Ripgrep 可以使用外部命令自动解压缩文件。
该系统使用平台命令来解压缩文件,使其具有可移植性,而无需特定的压缩库。
来源: crates/cli/src/pattern.rs1-182 crates/cli/src/decompress.rs1-530
Ripgrep 支持 --max-filesize 等选项中的人性化大小规范。
这允许用户以更人性化的格式指定大小。例如:
2K = 2,048 字节5M = 5,242,880 字节1G = 1,073,741,824 字节解析错误会提供关于预期格式的清晰消息。
来源: crates/cli/src/human.rs1-149
Ripgrep 提供处理转义序列的实用工具。
这允许:
\t、\n 和 \xFF)的字符串转换为实际字节。这些函数对于处理上下文分隔符、替换字符串以及可能包含特殊字符的任何其他文本非常有用。
来源: crates/cli/src/escape.rs1-160
ripgrep 的命令行界面是一个全面的系统,它:
这种架构使 ripgrep 能够提供强大而用户友好的界面,具有合理的默认值和广泛的自定义选项。