q: ‘VS Code 使用 ripgrep 进行搜索吗?’
a: ‘是的,VS Code 在内部使用 ripgrep 来实现其内置搜索功能,因此当您在编辑器中搜索时,您已经在使用它了。 要从集成终端运行 ripgrep,请将其安装在您的系统上(例如 macOS 上的“brew install ripgrep”或 Ubuntu 上的“apt install ripgrep”)并直接运行“rg”命令。
特征图片:/images/articles/code-search-and-replace-tools-from-grep-ripgrep.png——{</* 资源信息 */>}搜索代码是开发人员最常执行的任务之一。 查找函数的定义位置、跟踪变量的使用方式或在数十个文件中替换已弃用的 API - 这些操作每天会发生数十次。 正确的搜索工具可以将几分钟的滚动时间变成几秒钟的打字时间。代码搜索领域已经发生了巨大的变化。 grep 是已有 50 年历史的 Unix 主打工具,它已经让位于更快、更智能、对开发人员更友好的新一代工具。 本指南追踪了这一演变,对竞争者进行了基准测试,并向您展示如何构建一个搜索工具包,使浏览代码库变得毫不费力。
## 为什么 grep 已经不足以满足现代开发的需要grep(全局正则表达式打印)由 Ken Thompson 于 1974 年创建。 它在文件内容中搜索与正则表达式匹配的模式并打印匹配的行。 几十年来,它是唯一可用的工具。 它仍然预装在每个类 Unix 系统上,并在 shell 脚本中可靠地工作。但 grep 是为不同时代设计的。 它不理解“.gitignore”文件,因此会浪费时间搜索“node_modules”、“.git”和构建工件。 默认情况下,它不按文件类型过滤。 递归搜索需要“-r”标志,并且仍然遍历不相关的目录。 二进制文件处理很粗糙。 输出格式缺乏加速理解的视觉提示。对于几个文件中的简单搜索,grep 仍然有效。 对于现代代码库中的日常开发,有更好的选择。## ack:以开发人员为中心的 grep 替代品ack(“比 grep 更好,为程序员设计”)由 Andy Lester 于 2005 年创建。它引入了三个成为现代搜索工具标准的概念:自动尊重“.gitignore”、无需正则表达式的文件类型检测以及彩色格式化输出。使用 ack,您可以输入 ack --python "class User" 而不是 grep -r --include="*.py" "class User"。 --python 标志知道哪些文件扩展名属于 Python。 彩色输出以不同的颜色突出显示匹配项、行号和文件名。 这些默认设置可以节省打字时间并减少认知负担。ack 是用 Perl 编写的,并通过 CPAN 或包管理器安装。 它在 2025 年仍保持功能,但更新很少。 ack 的主要历史重要性是证明以开发人员为中心的搜索工具可以在 grep 的默认设置上得到显着改进。 请参阅 beyondgrep.com 了解文档。## Silver Searcher (ag):速度作为特征The Silver Searcher, commonly called “ag,” was released by Geoff Greer in 2011. It implemented the same developer-friendly features as ack but rewrote the core in C for maximum performance. 发布时的基准测试显示,对于典型的代码搜索任务,ag 比 ack 快 3-5 倍。ag respects .gitignore, .hgignore, and .ignore files automatically. It searches only source code files by default, skipping binary files, hidden directories, and generated artifacts. The command-line interface mirrors ack’s conventions: ag "function_name" --js searches JavaScript files.Editor integration is a strength. ag ships with built-in support for Vim (through plugins like ack.vim), Emacs, and Sublime Text. VS Code’s search uses ripgrep internally, but ag plugins remain available for Vim users who prefer its specific behavior.In 2025, ag’s maintenance has slowed. The last significant release was in 2020. While still functional, it has been surpassed by ripgrep in both speed and feature set. New setups should use ripgrep instead, but ag remains installed on many long-established development machines. The ag GitHub repository archives the project’s history.## ripgrep (rg):代码搜索的新标准ripgrep 由 Andrew Gallant 于 2016 年创建,是 2025 年占主导地位的代码搜索工具。它将 ack 和 ag 的最佳功能与卓越的性能、更智能的默认值和更广泛的平台支持结合在一起。 ripgrep 是用 Rust 编写的,利用内存映射、并行目录遍历和 SIMD 加速模式匹配来实现甚至超过 ag 的速度。在热文件系统缓存上,ripgrep 在大约 0.8 秒内搜索 Linux 内核源代码树(60,000 个文件中超过 2500 万行)。 grep 执行相同的搜索需要 8 秒以上。 ag需要2-3秒。 随着更大的代码库和更复杂的模式,性能差距扩大。智能默认设置消除了典型用途的配置。 ripgrep 自动尊重 .gitignore、.ignore 和 .rgignore 文件。 它会跳过隐藏文件和二进制文件。 它自动检测文件编码(UTF-8、UTF-16、Latin-1)。 结果是 rg "pattern" 在 95% 的情况下都能做正确的事情——不需要任何标志。ripgrep 正确支持 Unicode,包括搜索混合编码文件和匹配 Unicode 感知的正则表达式模式。 这对于具有国际化字符串、注释中的表情符号或非 ASCII 标识符的代码库很重要。类型过滤按语言缩小搜索范围,无需手动全局模式:bas h rg "User" --type js # 仅 JavaScript 文件 rg "User" --type-add 'config:*.conf' --type config # 自定义类型 rg "User" -tjs -trs # 多种类型:JS 和 Rust rg "User" --type-not json # 排除 JSON 文件通过“.ripgreprc”的配置文件支持允许您设置项目范围的默认值。 常见设置包括:````
bas
h
💬 留言讨论