受够了 cd 长路径?我做了个开源 macOS 工具,让 Finder 右键直接拉起 iTerm2 / VS Code / Warp
关键词:macOS、Finder、终端、iTerm2、VS Code、Warp、Xcode、效率工具、Swift、开源、FinderSync
一、先问个扎心的问题
各位 Mac 程序员,请回答下面这道题:
你今天在终端里敲
cd的次数,多还是git commit的次数多?
我猜大多数人答案都是前者。😮💨
每天的日常基本就是:
- 在 Finder 里翻到某个项目目录
- 打开 iTerm2 / Warp
- 复制路径 → 粘贴 →
cd "/Users/xxx/Documents/Workspace/.../很长很长很长的路径" - 终于可以敲第一条命令了
如果你想用 VS Code 打开,那还得再来一次 code .,或者拖文件夹到 Dock 图标。
这件事情 macOS 装睡了十几年。
我实在受不了了,于是花了点时间用 Swift 给自己造了个轮子 —— SnapClick,并且开源出来:
- 🔗 GitHub:github.com/Tyeerth/Sna…
- 📦 Releases 直接下
.dmg/.zip,免编译
下面重点讲讲它对终端党最香的那个功能。
二、核心爽点:Finder 右键 → 当前目录一键拉起终端 / 编辑器
装好之后,在 Finder 里任意文件夹空白处右键,或者右键选中某个目录,菜单里会多出一组开发者专属操作:
在此处打开 →
Terminal/iTerm2/VS Code/Warp/Xcode
点一下,对应工具会直接以当前目录为工作路径启动。
- 翻到老项目想跑 → 右键 → VS Code,秒进编辑器
- 想看 git log → 右键 → Warp,
git log立刻起飞 - 想在 Xcode 打开父目录 → 右键 → Xcode
它不改变你的习惯,只是让你少打几百次 cd。
三、技术实现:FinderSync Extension 怎么落地?
作为掘金读者,相信大家更关心实现思路。简单聊几个关键点:
1. 基于 FinderSync Extension
macOS 提供的 FIFinderSync 是一个独立的扩展进程,由 Finder 加载,可以:
- 在指定目录监听
- 提供徽标(badge)
- 注入右键菜单
我们通过 menu(for: .contextualMenuForContainer / .contextualMenuForItems) 动态构造右键菜单项。
2. 沙盒 + IPC 的坑
FinderExtension 是沙盒进程,不能直接调用所有系统 API,比如:
- 不能直接
NSWorkspace.shared.urlForApplication()探测应用安装位置(会触发 TCC 权限弹窗) - 不能随意做文件操作(写入路径受限)
我的解法是:
- 扩展只负责构造菜单 + 转发指令
- 真正的执行(开终端、复制路径、新建文件、计算哈希)由主 App 完成
- 两者通过 App Group UserDefaults + Darwin Notification 通信
// 简化示意
DarwinNotification.post(name: "com.snapclick.openInTerminal")
SharedDefaults.set(targetPath, forKey: "pendingOpenPath")
主 App 收到通知后再执行真正的动作。
3. 启动终端的姿势
打开 Terminal / iTerm2 / VS Code / Warp / Xcode,最稳的方式是用 open:
// 用 open -a 打开指定 App,并把目录作为参数传过去
let task = Process()
task.launchPath = "/usr/bin/open"
task.arguments = ["-a", "iTerm", path]
try? task.run()
⚠️ 小坑:不要用
activateFileViewerSelecting之类涉及 Apple Event 的 API,会触发自动化权限弹窗,影响首次体验。所以项目里我统一改用/usr/bin/open系列命令。
4. 让用户自己开启 Finder 扩展
这个一定要在文档/引导里写清楚:
系统设置 → 通用 → 登录项与扩展 → Finder 扩展 → 勾选
FinderExtension
否则用户装完会一脸懵:「右键怎么没东西?」
四、顺手附赠的程序员福利
既然你都装了,下面这些程序员高频功能也一并送上:
📁 路径高级拷贝
| 模式 | 用途 |
|---|---|
| 完整 POSIX 路径 | 贴到终端、配置文件、shell 脚本里 |
| 仅文件名 | 写 README / 提 issue 引用资源 |
| 引用路径 | 自动加引号,含空格也安全 |
🔐 文件哈希校验(MD5 / SHA1 / SHA256)
验证下载的二进制 / 镜像 / 签名包,再也不用:
shasum -a 256 ~/Downloads/xxx.dmg
右键直接出结果,自动复制到剪贴板。
🆕 一键新建代码文件(带模板)
右键空白处即可新建:
.py/.js/.ts/.sh.html/.css/.json.md/.txt.docx/.xlsx/.pptx
新建后自动进入重命名状态,模板内容可自定义(比如 .sh 自动带 #!/bin/bash)。
📋 真·剪切粘贴
macOS 原生 Finder 没有真正意义的"剪切"(按住 Option 才能在粘贴时变成移动),SnapClick 给你补上 Windows 式的剪切粘贴流。
五、还有这些"非终端党"也用得上
顺便说一下其它模块(不是本文重点,简略列一下):
- ⌥⇧A 智能区域截图 + 长截图 + 标注(步骤序号 / 马赛克 / 箭头) —— 写技术博客打码 API Key 必备
- ⌥⇧C 16x 像素级取色 —— 直接复制 HEX / RGB / Swift NSColor / CSS 代码
- ⌥⇧P 屏幕贴图 —— 设计稿钉在屏幕最上层,单屏伪双屏
- 基于 ScreenCaptureKit 的录屏 —— 30/60/120 FPS,HEVC/H.264,低占用
六、技术栈一览
| 技术 | 用途 |
|---|---|
| Swift 5.9+ | 主开发语言 |
| SwiftUI + AppKit | 混合 UI 架构 |
| FinderSync Extension | Finder 右键菜单注入 |
| App Group + Darwin Notification | 主 App 与扩展 IPC |
| ScreenCaptureKit | 截图 / 录屏 |
| CGEventTap | 全局快捷键拦截 |
| AVFoundation + CryptoKit | 编码 / 哈希 |
- ✅ 纯原生,无 Electron,无套壳
- ✅ 完全离线,无登录、无账号、无遥测
- ✅ Apache 2.0 开源
七、下载与体验
- 📦 GitHub Releases:github.com/Tyeerth/Sna…
- ⭐ 项目主页:github.com/Tyeerth/Sna…
- 🍎 macOS 13+(Apple Silicon & Intel 通用)
装好后请到「系统设置 → 通用 → 登录项与扩展 → Finder 扩展」勾选启用
FinderExtension,否则右键不会出现增强菜单。
八、最后
这个功能是我做整个 SnapClick 最初的动机 —— 因为我实在受够了 cd 长路径。
作为一个独立开发者,做这种小工具其实挺费心力的:要兼顾 FinderSync 沙盒、IPC 通信、TCC 权限、不同终端的拉起姿势……每一个细节都得自己踩坑。
所以如果你看到这里,真的觉得这个工具对你有帮助 / 帮你少打了几十次 cd,麻烦顺手在 GitHub 给个 Star ⭐ —— 对我来说,这是继续维护和开发新功能的最大动力。
👉 GitHub 一键 Star:github.com/Tyeerth/Sna…
也欢迎:
- 🐛 提 Issue 反馈 Bug 或想要的新功能
- 🤝 提 PR 一起把这个工具做得更好
- 💬 在评论区留言,告诉我你最想要的下一个 Finder 右键功能
愿天下程序员,再无 cd 之苦。 🫡
📌 如果这篇文章帮到了你:
- 点个 👍「点赞」 支持一下
- 收藏 ⭐ 方便以后查找
- 关注我,后续会持续分享更多 macOS 原生开发 / Swift / 独立开发 的干货
项目地址:github.com/Tyeerth/Sna… (觉得有用记得给个 Star ⭐ 哦!)