一个全职开发者平均每天要在终端里执行87条命令。其中至少三分之一是重复操作——切分支、起服务、跑测试。但当你按↑键找历史记录时,终端给你的却是一份来自三年前、完全不相关项目的"乱炖"。
这不是性能问题。是设计缺陷。
开发者Siddharth Sharma受够了这种"上下文 blindness(盲视)"。他花了8个月做了一个叫Termim的工具,核心就一句话:让终端按项目记住你该记住的。
为什么Ctrl+R越用越烦
现有终端历史的痛点,用过的人都懂。你记得自己跑过某个Docker命令,Ctrl+R输入"docker",然后陷入无尽的滚动循环——结果里混着上个公司的部署脚本、半年前随手试的镜像、还有完全无关的容器操作。
Shell历史的问题不是慢,是零上下文。它把你在任何目录、任何项目敲过的命令,全部倒进同一个池子里。就像把家里所有钥匙扔进一个盒子,每次开门都得翻一遍。
Sharma试过Atuin、McFly这些现有方案。它们的"上下文"是软性的、建议性的,不是强制的。有些还要后台常驻服务。他想要更严格、更简单的东西:我在项目A里,终端就该表现得像它知道项目A。
Termim的解法粗暴但有效——按项目隔离历史记录。切到不同目录,↑键只调出该项目的命令。没有噪声,没有跨项目污染。
↑↓两键的隐藏逻辑
Termim的交互设计藏着一层巧思。↑键的优先级是:先项目历史,再全局历史。↓键则反向:先回到项目内,再显示预测建议。
这不是简单的过滤。Termim会跟踪命令之间的加权转移模式——你经常"git checkout main"之后跑"git pull",它就会记住这个流程。久而久之,你不用搜索,直接↓键就能"顺流而下"。
Sharma在Hacker News上解释这个设计时,有人反馈说:"终端历史一直感觉'不对劲',但我从没把它框定为上下文问题。"这条评论被点了400多次。
Termim支持Bash、Zsh、Fish、PowerShell。安装后它像壳的一部分,而非外挂。没有额外的学习成本,因为用户本来就在按↑↓。
四个"洁癖"设计原则
Sharma列了几个他特别在意的细节。硬上下文隔离——命令绝对不会跨项目泄露。只学成功的——失败命令被忽略,不让错误模式污染预测。隐私优先——全部本地运行,敏感信息自动脱敏。确定性行为——导航没有随机性,同样的操作永远得到同样的结果。
这些原则指向同一个判断:终端历史被低估太久了。我们接受了二十年的糟糕体验,只是因为没人认真想过"上下文"这件事。
Termim目前还是个人项目,代码在GitHub开源。Sharma的主业是AI基础设施,做这个工具纯属"自用驱动"——他自己每天要在多个仓库之间跳转,传统终端历史让他"亏麻了"时间。
有用户试完后评论:"项目感知命令+行为学习是真正的升级。"Sharma回了个。
另一个细节:Termim不是搜索优先,而是上下文优先。理想情况下,你甚至不需要用history | rg(ripgrep,一种文本搜索工具)去翻历史。
工具本身很小,但背后的观察很狠——开发者每天和终端打交道的时间,可能比和IDE还长。而这么重要的界面,历史功能却停留在1970年代的设计水平。
Termim能火吗?Sharma没打算商业化。但他在帖子里留了一句:"如果你愿意试试或给反馈,真心感谢"——截至发文,这条GitHub仓库的Star数正在涨。
终端会记住你,这件事听起来本该理所当然。但在此之前,你得先让它知道"你是谁"——或者说,你在哪。
热门跟贴