McFly 智能 Shell 历史搜索
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/mcfly-intelligent-shell-history-search。
技能介绍
要解决的问题
Ctrl+R 弹出的搜索框只会做纯文本匹配:你输入的关键词和历史记录里的字符对上了就排在前面,至于这条命令是在哪个目录下敲的、跑了多少次、上一次是成功还是报错,它一概不知道。于是常见的情况是:你在 ~/projects/api 里想重新执行上周跑过的那条 docker compose up,却因为之前在别的目录里用过同名参数的命令,翻了好几页才找到。
McFly 做的事情就是把「回忆」换成「上下文推断」,让目标命令尽量排到候选列表的最前面,少翻页、少敲完整命令。
它如何工作
McFly 是一个用 Rust 写的 Shell 历史搜索工具,内部维护一个小型神经网络,把下面几类信号编码成向量,再据此给每条历史命令打分排序:
- 当前目录:命令在哪个路径下执行过。同目录下用过的命令,之后重复使用的概率更高。
- 使用频率:一条命令被执行的次数越多,权重越大。
- 退出状态:上次运行是
exit 0还是非零退出,会影响它再次被推荐的可能性。
整个流程大致是:你在 Shell 里触发搜索 → 进入一个全屏的交互界面 → 工具读取当前目录与历史上下文,由神经网络实时重排候选命令 → 选中后直接执行。全程不需要你输入完整的命令文本,敲几个字符就能命中。
相比传统 Ctrl+R,关键差别在于排序逻辑从字符串匹配变成了基于上下文的学习式排序,模型本身很小,不需要云端服务,直接在本地跑。
适用边界与注意点
- 依赖上下文质量:排序依赖历史数据里记录的目录、频率和退出状态。刚换到一台新机器、历史还是空的时候,它的推荐和纯文本搜索差别不大,需要一段时间的使用数据才能体现出优势。
- 权重由数据决定,不一定符合直觉:如果某条命令你过去都是在别的目录用的,它照样可能被顶到前面,此时需要主动干预或修正习惯。
- 时间参数必须带单位:上游文档明确要求,所有时间跨度的取值必须附带时间单位,只写数字会被视为无效配置。
- 替换了原有的搜索习惯:它用全屏搜索界面取代了
Ctrl+R,从「边敲边过滤」变成「进入界面再选」,有学习成本,也需要确认你的终端和 Shell 能正常渲染全屏界面。
简单说,它适合命令历史长、日常在多个项目目录间切换的开发者;如果历史记录本身就很短,收益有限。
使用场景
- 后端开发在多个项目目录间切换,回到某 API 目录想重新执行上周用过的 docker compose 命令,不想逐条翻历史。
- 运维工程师日常在服务器上重复执行部署脚本,想快速调出当前目录下上次成功运行的那条部署命令。
- 测试人员在测试环境目录频繁执行同一批调试命令,希望通过模糊搜索少敲完整的命令和参数。
- 刚接手同事机器的开发者面对大量历史命令,想按当前目录过滤出这个项目实际用过的命令。
适合人员
- 后端与基础设施开发者:常在多个项目目录间用命令行部署调试,希望目标命令直接排到候选列表前面。
- 运维工程师与 SRE:日常在服务器上重复执行部署、重启、排查命令,历史记录长且杂,需要快速定位上次用过的命令。
- 独立开发者与小团队工程师:工具链依赖 Docker、npm、git 等命令,希望按目录和频率减少重复输入。
- Linux 命令行重度用户:习惯 Ctrl+R 但受够纯文本匹配,愿意换成考虑目录、频率和退出状态的搜索方式。