5分钟搞定ripgrep默认配置:一条环境变量告别重复参数
【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep
ripgrep(简称 rg)是目前命令行里公认最快的正则搜索工具,递归扫描目录、自动尊重 .gitignore。可惜它有个"毛病":每次启动都是白纸一张,你上次精心拼好的--smart-case --hidden -g '!*.lock'一关终端就全忘了。与其天天重打参数,不如花5分钟把常用规则固化成默认配置,从此rg foo直接跑出你想要的效果。
为什么rg记不住我的习惯?
不是 rg 不智能,而是它天生无状态:每次运行都从零解析参数。好在官方留了一个"记忆入口"——RIPGREP_CONFIG_PATH环境变量。rg 启动时先检查这个变量,如果它指向一个有效文件,就把文件里的每一行都当成命令行参数,拼接在你敲的命令前面。
注意"拼接在前面"这个细节,它决定了整套规则的走向。在源码里,参数解析模块(crates/core/flags/parse.rs)会先把配置文件读出的参数 prepend(前置)到进程参数之前,再统一解析。所以配置文件本质上是"一段替你打好的固定前缀",而你临时输入的命令跟在后面。
至于配置文件的读取逻辑,核心代码非常短(crates/core/flags/config.rs):环境变量没设置或为空,直接跳过;文件路径读不到,就打印一行failed to read the file的报错。
配置文件里到底能写什么?三条规则一个坑
格式简单到只有两条规则:
- 每一行等于一个命令行参数,首尾空白自动忽略
#开头或空行直接跳过,可以放心写注释
最大的坑也在这里:一行只等于一个参数。像--type-add web:*.{html,css,js}*这种"参数带值"的组合,必须拆成两行写,写在一行会被当成一个整体参数而失效。
下面是一份可以直接抄的示例,保存为~/.ripgreprc:
# 我的默认搜索习惯 --smart-case # 纯小写时自动忽略大小写 --hidden # 连隐藏文件一起搜 --glob=!*.lock # 排除锁文件 --type-add web:*.{html,css,js}* # 自定义文件类型:web这些配置项都是 rg 的普通参数,你在命令行怎么用,在这里就怎么写,没有任何额外语法负担。
一行命令让配置永久生效
配置文件建好后,只要把环境变量指过去。Linux/macOS 用户在~/.bashrc(zsh 用户是~/.zshrc)末尾追加:
echo 'export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"' >> ~/.bashrc source ~/.bashrcFish 用户对应set -Ux RIPGREP_CONFIG_PATH "$HOME/.ripgreprc";Windows 则在系统设置里新建用户变量,变量名RIPGREP_CONFIG_PATH,值填配置文件完整路径。之后开任意新终端执行rg foo,默认规则就自动挂上了——这就像给 rg 设了个"默认收货地址",每次下单自动带上,不用再手动填。
怎么确认配置真的生效了?
空口无凭,让 rg 自己交代。用--debug参数跑一次,把调试输出过滤出来看:
rg --debug "TODO" 2>&1 | grep config正常会看到一行arguments loaded from config file,后面跟着从文件里读出的全部参数清单。如果出现failed to read the file,说明路径写错或文件没权限;如果什么都没有,多半是环境变量没设置成功,先echo $RIPGREP_CONFIG_PATH验一下。记住:--help和--version这类特殊命令不受配置文件影响,调试时别拿它们试。
参数打架时谁说了算?命令行永远赢
回到"前置拼接"机制:最终参数顺序是配置文件在前、你敲的命令在后,而后出现的参数会覆盖前面的同名参数。所以配置文件里写了--context=2,你临时执行rg --context=5,实际生效的是 5。💡 想临时脱离默认配置,用--no-config一键跳过所有配置文件,排查问题相当顺手。
还有一个容易踩的坑:即使配置文件里用了-e指定模式,命令行上仍然必须至少提供一个搜索模式,否则 rg 会直接报错——配置文件能帮你省参数,但替代不了你敲下命令本身。
不同场景想用不同配置怎么办?
一套配置不可能通吃所有场景。更灵活的做法是准备多份配置文件,用 shell 别名切换:代码搜索一套严格规则,日志搜索一套宽松规则。比如建好~/.ripgreprc-code和~/.ripgreprc-log后,在 shell 里定义alias rg-code='RIPGREP_CONFIG_PATH=~/.ripgreprc-code rg',之后敲rg-code foo走严格配置,敲rg foo仍用默认配置,互不干扰。想深入折腾更多参数,可以在仓库的 crates/core/flags 目录下翻翻参数定义和 man 文档,那里是全部规则的权威出处。
速查清单
- 格式:一行一个参数,
#注释,空行忽略;参数带值的组合必须拆行 - 机制:配置参数被前置到命令行参数之前,后写的覆盖先写的
- 生效:Linux/macOS 写进 shell 启动文件,Windows 用系统环境变量
- 验证:
rg --debug "关键词" 2>&1 | grep config - 开关:
--no-config跳过配置;--help/--version不受配置影响 - 进阶:多份配置文件 + 别名切换,实现场景化配置
到这里,rg 已经从"每次重新调教"升级成"记得住你习惯"的顺手工具。剩下的细节,交给你的使用场景去慢慢发现。
【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考