在 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” 方式相对于标准搜索方式的看法!

Back to Blog

相关文章

阅读更多 »