tamia6
(tamia )
1
软件名称
rfig
推荐类型
开发者自荐
平台
macOS、Linux
一句简介
用 Rust 编写的终端自动补全工具,支持 zsh、Bash、Fish,在输入时展示交互式菜单,并结合本地历史提供灰字建议。
核心功能
- 输入命令时自动展示补全菜单,不需要按 Tab。
- 支持多级子命令、选项、参数和动态上下文,例如
git checkout 后显示当前仓库分支。
- 优先使用已安装的 shell 补全定义;缺少定义时可从命令的
--help / -h 学习,并在安装后后台优化缓存。
- 根据用户选择习惯调整候选排序。
- 结合本地历史提供类似 autosuggestions 的灰字提示。
- 支持 zsh、Bash、Fish。
- 使用终端配色适配菜单颜色和分类图标。
安装
brew tap tamia6/rfig
brew install rfig
rfig setup
也可以从 GitHub Releases 下载包含二进制和安装脚本的压缩包。
演示

官网
源码
费用
免费、开源。
说明
当前界面以英文为主,项目正在完善多语言支持。
发帖前麻烦检查一下排版,这里的 Markdown 标记都被转义掉了,没有正常显示出来。
刚刚给您调整了一下排版。
Junkai_Wu
(Wu Junkai)
3
表现有点差啊,rfig 在多行 prompt下有重绘漂移的问题
现象
终端窗口较窄(约 58 列)时,输入 tar 后屏幕变成这样(空行原样保留):
wujunkai@windows11 ~
2 × 10:40:47
wujunkai@windows11 ~
2 × 10:42:48
$ tar
→ ⚑ -c
⚑ -t
...
两个观察:
- 状态行被画了两份,而且时间戳不同(
10:40:47 vs 10:42:48)——说明其中一份是过期位置上的重印;
- 持续输入后空行不断累积,输入行逐渐"沉"到屏幕底部。
看了下代码,感觉当前的重绘模型建立在"屏幕静止"的假设上:
rfig.bash 在 PS1 前埋 \[\e7\],每次按键用 \0338 恢复到这个保存的绝对位置并重印整个 prompt(_rfig_edit 里的 printf '\0338%s' "$prompt");
editor.rs 的菜单用 MoveTo(self.x, self.y) 绝对定位,坐标在进程启动时取一次;
editor.rs 里有滚动补偿(let scroll = (self.y + height).saturating_sub(self.rows)),但看起来只补偿菜单自身溢出引起的滚动。
问题在于,外部因素一样会让屏幕滚动或折行:bash 的回显换行、终端 resize 重排、以及 WSL/Windows Terminal 的滚动缓冲行为。一旦发生,DECSC 保存的坐标就是过期值,重印会落在
错位的地方,而且每次按键误差累积。
多行 + 右对齐块的 prompt 会放大这一点,我遇到的具体链条是:
prompt_rows 只统计字面 \n,而 omp 第一行(用户名 + 右对齐的执行时间/时间戳)在窄窗口下会折行,实际占 2 行、按 1 行算;
prompt=${PS1@P} 在每次按键时重新求值,而 PS1='$(_omp_get_primary)' 里是命令替换——也就是说每个键都会重跑一次 oh-my-posh。重新求值出的 prompt 内容宽度和屏
幕上那份不同(状态符号、0ms/2ms、秒数都在变),折行行为跟着变。
1 个赞