Rust rfig:用 Rust 实现的终端自动补全,支持 zsh、Bash、Fish

tamia6 · 2026年10月08日 · 最后由 miaowoo_ai 回复于 2026年10月12日 · 228 次阅读

rfig:用 Rust 实现的终端自动补全,支持 zsh、Bash、Fish

rfig 是一个开源 Rust 终端工具,为 macOS 和 Linux 上的 zsh、Bash、Fish 提供输入即出现的命令补全菜单,以及按当前目录匹配的内联历史建议。它受 Fig 启发,是一个独立的开源 Fig 替代方案。

rfig 在 zsh 中展示命令补全菜单与内联历史建议

实际终端演示:命令与路径补全,以及输入 gi 时同时显示菜单和内联历史建议。

输入时展示候选,继续补全下一层

不用先按 Tab:输入命令后即可浏览候选,用上下方向键选择、右箭头插入,再继续输入下一层。已有补全定义可以提供子命令、当前仓库的分支、路径等动态内容;可用层级和候选范围取决于本机的补全来源。

菜单与历史建议可以同时出现,而且分别计算。例如只输入 gi 时,菜单仍然根据 gi 提示命令,灰色的历史建议则可能补出以前在当前目录执行过的 git checkout main。Ctrl+E 接受历史建议;有历史建议时 Enter 执行完整建议,否则执行实际输入,不会自动接受菜单选中项。

内置历史建议可以替代 zsh-autosuggestions 的历史命令建议功能。rfig 自行维护带工作目录的本地历史,不自动导入缺少目录信息的旧 Shell 历史。选择与执行记录也会参与候选排序,最多前三个有使用记录的候选显示圈号,其他候选仍正常展示。

Rust 与 Shell 怎样协作

zsh 使用 ZLE,Bash 和 Fish 共用 Rust 编辑层,命令仍由当前 Shell 执行。补全优先复用环境中的原生定义和已安装脚本,再结合可识别的补全生成器、协议和帮助缓存。

安装设置时快速扫描 PATH 与常见补全目录,随后在隔离能力可用的情况下,串行分析符合条件的用户命令。帮助分析只是后备来源,不能保证任意命令都有完整的多级补全。

图标与选中文字使用终端 ANSI 调色板,菜单以箭头指示选中项。历史、排序记录和缓存保存在本机。

安装

当前支持 macOS、Linux,以及 zsh、Bash 4.4+、Fish 3.6+。Homebrew 安装:

brew install tamia6/tap/rfig
rfig setup

设置后打开新的 Shell 会话。也可以下载包含二进制和安装脚本的发布包,或从源码安装;详细系统要求和使用说明见项目文档。

项目源码:https://github.com/tamia6/rfig

中文官网与演示:https://tamia6.github.io/rfig/zh/

欢迎反馈多 Shell 集成、终端显示和补全来源方面的体验。

试了一下思路很对——特别是"复用环境中的原生补全定义而不是自己维护一套 DSL"这一点,避免了 Fig 时代最大的维护负担(补全规范过时)。

几个实际使用上的问题想确认:

  1. Bash 4.4+ 共用 Rust 编辑层是通过 readline 的什么机制挂进去的?会不会和 fzf/ble.sh 这类同样接管按键的插件冲突?
  2. 自维护的带工作目录历史,有没有提供导出/清除命令?如果历史里包含带敏感 token 的命令,本机存储的清理路径最好显式给出。
  3. Bash 下 Enter/方向键的语义和 zsh ZLE 一致吗?zsh 里靠 ZLE widget 天然获得这些行为,Bash 模拟时容易在多行命令和 history expansion 上出边界情况。

跨 shell 一致性是这个方向最难啃的部分,值得持续关注。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号