在 C++20 中构建 IntelliSense 风格的 Shell 历史工具
发布: (2025年12月31日 GMT+8 00:55)
3 min read
原文: Dev.to
Source: Dev.to
问题:“搜索” vs. “流”
我们都在终端里工作。多年来,我一直依赖 Ctrl + R 或在 .zsh_history 中 grep。后来 Atuin 通过 SQLite 和同步功能带来了革命性的改变,但它们并不完全符合我的工作流。
大多数现代历史工具的行为像搜索引擎:你停下手头的工作,按下热键,打开全屏 UI,搜索命令,然后执行它。这感觉像是一次上下文切换。
我想要一种像 IntelliSense 的体验——一种能够:
- 在我输入时预测我想要的内容。
- 理解我的上下文(例如,“我在
feature/login分支的 Git 仓库中”)。 - 除非我需要,否则保持不干扰。
于是我构建了 BSH(Better Shell History)。
架构
BSH 是一个 本地优先、对延迟敏感 的 Shell 历史管理器,挂钩到 Zsh 行编辑器(ZLE),提供每次按键都更新的预测叠加层。
客户端‑守护进程模型
| 组件 | 描述 |
|---|---|
守护进程 (bsh-daemon) | 用 C++20 编写的后台进程。保持对 SQLite 数据库(WAL 模式)的打开连接,并通过 libgit2 缓存 Git 仓库状态到内存。 |
客户端 (bsh) | 轻量、短暂的二进制文件。序列化每一次按键,通过 Unix 域套接字发送给守护进程,并打印响应。 |
| 界面 | 使用 FTXUI 渲染的 TUI 叠加层。 |
延迟是敌人:10 ms 的延迟就会感觉很沉重,因此我们的目标是尽可能低。
试一试吧,并分享你对 “IntelliSense” 方式相对于标准搜索方式的看法!