FinderLink
本地文件的快速入口层:Quick Open、搜索与历史、Open With 和自定义 URL 动作,把「找到文件、送进工具」压缩成一次按键。
为什么做
日常工作里出现频率最高的动作之一是「找到某个文件或目录,把它送进某个工具」:把项目目录用 Cursor 打开、把文件路径发给 Codex、把一段资料送进 QuickGPT 的上下文。每一次都要经过 Finder 或文件对话框,路径深一点就要点四五层。这个动作本身没有任何思考含量,纯粹是损耗。
FinderLink 把它压缩成一次按键:在 Raycast 里呼出,输入几个字母定位到目标,回车或选一个动作,文件就到了该去的地方。
它是什么
FinderLink 由 Raycast 扩展和 CLI 两部分组成,定位是本地文件的入口层,不是重型文件管理器。核心能力有五块:Quick Open(模糊搜索快速打开)、Browse Links(浏览预配置的常用路径)、搜索与历史、Open With(选择应用打开),以及自定义 URL action——用 URL 模板定义「把当前文件送进某工具」的动作,Codex、Cursor、QuickGPT 都是这样接入的。
它还从 QuickGPT 移植了内容复制能力:Copy as File、Copy as Zip,把一个目录的内容按忽略规则过滤后复制出来,作为 AI 对话的上下文材料。
技术要点与设计决策
这个项目最有记录价值的部分是几条性能红线,每条背后都有教训。
懒加载是用真实的卡顿换来的。旧实现在列表首屏为每个条目预构建「用哪些应用打开」的动作列表,并逐条目同步执行 git remote get-url origin 判断是否要显示 Git 动作——500 个条目、每个约 38ms,加起来约 19 秒。现在应用动作与 Git 动作全部懒加载:列表先出来,动作在展开时才构建。代价是 Git 动作对非 Git 路径也会显示、触发后才提示无 remote,这是有意接受的交换。
搜索热路径上,拼音匹配只在候选含汉字时才启用,非汉字候选完全不触碰拼音库——这一条让冷启动保持在约 30ms。模糊匹配算法用 banded DP(带状动态规划)缓冲区实现,匹配过程不创建子串,避免高频输入下的内存分配开销。
算法改动有一道硬门槛:任何对模糊匹配的修改,必须通过 50,000 个固定随机种子生成的用例做新旧差分,分值零差异才能合入。搜索排序是这类工具的手感所在,肉眼验证靠不住,只能用穷举差分守住。
忽略规则是三层叠加的体系:.finderlinkignore → .quickgptignore → .gitignore,逐级祖先目录合并,语法与 gitignore 一致。其中 .quickgptignore 是与 QuickGPT 共用的跨项目约定——同一份数据边界声明,两个工具都遵守。边界也有粒度:目录浏览不应用忽略规则(只过滤点文件),只有内容复制走过滤——浏览要的是完整视图,复制要的是干净上下文,两件事不混在一起。
当前状态
活跃维护中,日常高频使用。仓库尚未公开(已完成开源准备,去除了内置的个人路径别名),公开后会补充链接。