说明:本文配图均为界面示意图,图中的文件名、路径、列表内容已做马赛克处理,不涉及真实数据。
一、起因:每天被这些小事磨掉一小时
我每天的工作里,有大量时间花在「找东西」上:
- 微信群里发的 Excel,下载完就找不到在哪个目录了;
- 三个月前写过的某个方案,只记得标题里有两个字;
- 一段复制的文字想存下来,过两天翻聊天记录翻半天;
- 提 Bug 要截图、要标注、要贴到飞书表格里,一套流程七八步;
- 账号密码散落在备忘录、记事本、浏览器书签里。
这些事单件都不难,但一天来回几十次,人就烦了。市面上的工具要么太重,要么要登录账号、把数据传上云,我不太放心。
所以我干脆自己写了一个:一个常驻托盘的 Windows 桌面效率助手,所有数据都存在本地,不联网也能用大部分功能。

技术栈很简单:Electron 33 + Vue 3,数据库用的是 sql.js(WASM 版 SQLite,纯 JS、免编译),装在本地 %APPDATA% 目录里,关掉窗口就缩到托盘,不占任务栏。
二、它现在能干什么
整个应用是「侧边栏 + 多页面」的结构,功能模块各管一摊,共用一套本地数据库。真正高频的是下面五个快捷键入口。
1. Ctrl+Shift+C:剪贴板剪藏
复制任何东西,按一下快捷键,内容就被抓下来了:自动清洗格式 → 算内容哈希去重 → 调大模型生成一句话摘要 → 存进本地库。
我把它当成「随手记的收纳盒」,剪藏库只保留当天内容,跨天自动清空,所以永远不会变成第二个垃圾场。没配置大模型 API 时,摘要自动降级成本地规则引擎,功能照样能用,只是不聪明。
2. Ctrl+Alt+F:全盘文件快搜(本文重点)
这是我花时间最多、也最常用的一个功能。
日常场景:屏幕顶部弹出一个半透明小面板,输入两个字,几百毫秒内给出结果,回车直接打开文件。像 macOS 的 Spotlight,但它是给 Windows 用的,而且能搜文件正文。

它现在支持的东西:
- 文件名 + 正文双通道:文件名没命中,就去扫文档正文(PDF、Word、Excel、Markdown、纯文本都能提取文字),返回命中位置前后 30 字的片段,关键词高亮;
- 类型过滤 :输入
ext:pdf只搜 PDF,也可以点右侧的「文档」图标; - 多词组合 :
发票 2024表示两个词都要包含,-草稿表示排除带「草稿」的; - 正则精确筛 :用
/正则/包起来,只筛文件名和路径,适合^2026-.*复盘这类场景; - 三个分类:程序(读 Windows 真实使用记录,按最近打开排序)、操作(剪藏库内容,回车即复制)、文档;
- 空态不空:什么都没输的时候,直接列出最近改动的 10 个文档;
- 全套键盘操作:↑↓ 选择、Enter 打开、Ctrl+Enter 定位到文件夹、Ctrl+C 复制路径、Esc 关闭;右键还有「移至回收站」。
真实的性能数据(索引了 26.9 万个文件,这是我自己项目、代码、微信文件、下载目录的总和):
| 操作 | 实测耗时 |
|---|---|
| 文件名关键词搜索 | 约 55--150 ms |
| 正文关键词搜索 | 约 210--350 ms |
| 正则筛选文件名 | 约 235--330 ms |
| 空态最近文件列表 | 约 100--200 ms |
三、快搜背后的三个工程坑
一个「看起来很简单」的搜索框,实际上踩了不少坑,这里挑三个最有代表性的。
坑一:没有全文索引,只能硬扫
sql.js 编译的 SQLite 里没有 FTS5 全文索引模块,日志里一行 no such module: fts5 直接判了死刑。所以正文搜索只能是 LIKE 全表扫描,26 万行、4 亿字符,纯靠 CPU 硬扛。
扛下来的办法是控制扫描范围:
- 索引只挑有用的目录(桌面 / 文档 / 下载,可自定义),
node_modules、.git、dist这类目录直接跳过; - 编译产物、图片、音视频、压缩包等扩展名只记文件名、不读内容,文件名照样能搜到,但不会浪费时间解析;
- 大于 2MB 的文本写一个占位符,避免反复重读;
- 后台增量构建,按修改时间和文件大小跳过没变过的文件,不重复劳动。
坑二:数据库膨胀到 1GB,启动开始变慢
索引到 26 万文件时,单个数据库文件涨到 1.07 GB。sql.js 的毛病是把整个库读进内存,于是每次启动都要读这一大坨,写一次设置还要把整库重写一遍------主界面明显变卡。
解决办法是拆库:
- 主库
assistant.db只留业务数据(设置、剪藏、会议纪要、Bug 记录、凭证),拆完只有 45 KB; - 索引库
search-index.db单独放 26 万行文件索引,首次搜索才懒加载; - 迁移不做 VACUUM(1GB 库压缩时内存峰值会翻倍),而是新建空库、只拷业务表再替换,一次迁移 269,589 行,校验无误。
顺带加了个启动预热:应用启动 3 秒后,后台先把索引库读进内存,等你第一次按 Ctrl+Alt+F 时,不用再干等那 900 多毫秒。
坑三:Windows 上的「真毛玻璃」和圆角是死结
参考 macOS 那种白色半透明面板,一开始我用的是 Windows 系统级 Acrylic 材质。结果是:系统材质不受窗口裁剪影响,永远铺满整个矩形窗口------四角永远是方的,深色主题下还会压出一层黑罩。
试过用 setShape 裁圆角,Acrylic 直接无视。最后的方案是放弃系统材质,改成纯透明窗口 + 渐变 + 双边内阴影:
- 面板用顶部稍亮、底部微暗的渐变做出「厚度」;
- 用两条内阴影模拟玻璃边缘的反光,不加外投影(外投影在透明窗口上会出现黑边);
- 收起态是窄胶囊,鼠标移入才展开成完整面板,展开和收起都不改窗口高度,只切换子元素,避免整窗重绘闪帧。
现在这个面板在深色桌面上也不会发灰,四角是干净的 16px 圆角。
四、另外三个顺手做掉的功能
Ctrl+Shift+S:截图标注 → 一键提 Bug 到飞书
按快捷键 → 全屏截图 → 用箭头、矩形、椭圆、画笔、文字标注 → 填标题和严重程度 → 自动上传截图、按天汇总到飞书电子表格里,返回文档链接。
截图流程有个必须遵守的顺序:先抓屏、再显示窗口。反过来的话,截图窗口自己会被拍进画面,第二次截图就永远是第一次的残留。
飞书那边也有细节:上传图片必须用 docx_image 类型挂到指定文档,文档里的图片块要按「建空块 → 挂素材 → 更新块」三步来,链接不能拿 open.feishu.cn 拼,得单独查元数据。这些都是一条条踩出来的。
Ctrl+Shift+O:截图 OCR
同一套截图流程,走文字识别,识别完直接复制走。开会拍 PPT、截个报错日志,比手打快得多。
凭证保险箱
主密码 + PBKDF2-SHA256(60 万次迭代 + 随机盐)+ AES-256-GCM 加密,凭证数据和剪藏库物理隔离。连续输错 5 次主密码自动锁定 1 分钟。账号密码终于不用散在记事本里了。

五、踩过的坑,挑几条真实的
- 推理模型的返回不能直接取
content[0].text:通义千问这类模型会先吐一个thinking思考块,直接取第一个会拿到空,必须按类型过滤后拼text,同时把max_tokens提到 4096,否则思考过程能把额度吃光。 - PDF 解析库版本要锁死 :
pdf-parse装了 2.x 是 ESM 重写版,还带原生依赖,主进程中直接报pdfParse is not a function;锁到 1.1.1(纯 JS)才稳。 - 快捷方式图标不能直接取 :对
.lnk调图标接口只会返回通用空白图标,必须先解析到目标 exe 再取。 - 并发搜索会乱序:同一个关键词连打两次,先发的请求可能后回来,把最新结果覆盖成空列表。加一个版本计数器,只有最新那次能写 UI。
- 主进程改代码不热更新:electron-vite 只热更新渲染层,改主进程必须手动重启,否则会陷入「代码明明改了却没反应」的自我怀疑。
六、做了这么久,它到底改变了什么
说实话,收益不是「效率提升 300%」那种漂亮数字,而是三件很小的事:
- 找文件不再有心理负担。 记不住路径没关系,记得两个词就行,按 Ctrl+Alt+F、打两个字、回车。
- 东西有地方放了。 剪藏库当天清空、凭证进保险箱、Bug 自动落到飞书表格,脑子里不用一直挂着「那个东西我存哪了」。
- 数据是自己的。 全部在本地,不上传、不登录、不依赖某个服务活着。断网也能用,服务下线也不会丢。
这个工具没有开源打算,因为它就是给「我这种工作方式」量身做的:微信收文件、每天提 Bug、偶尔翻旧方案、总要找密码。别人拿过去,可能一半功能都用不上。
但整个过程验证了一件事:日常里那些让你「哎,又要来一遍」的小动作,攒起来做一次自动化,回报比想象中大得多。 哪怕只是少按几次「打开文件夹、翻目录、复制路径」。
如果你也经常在 Windows 上找文件找到崩溃,可以先用 Everything 这类工具过渡。真正想顺手,还是得自己动手把工具捏成自己手的样子。