受够了 `cd` 长路径?我做了个开源 macOS 工具,让 Finder 右键直接拉起 iTerm2 / VS Code / Warp,并快速获取当前所在路径

0 阅读5分钟

受够了 cd 长路径?我做了个开源 macOS 工具,让 Finder 右键直接拉起 iTerm2 / VS Code / Warp

关键词:macOS、Finder、终端、iTerm2、VS Code、Warp、Xcode、效率工具、Swift、开源、FinderSync

一、先问个扎心的问题

各位 Mac 程序员,请回答下面这道题:

你今天在终端里敲 cd 的次数,多还是 git commit 的次数多?

我猜大多数人答案都是前者。😮‍💨

每天的日常基本就是:

  1. 在 Finder 里翻到某个项目目录
  2. 打开 iTerm2 / Warp
  3. 复制路径 → 粘贴 → cd "/Users/xxx/Documents/Workspace/.../很长很长很长的路径"
  4. 终于可以敲第一条命令了

如果你想用 VS Code 打开,那还得再来一次 code .,或者拖文件夹到 Dock 图标。

这件事情 macOS 装睡了十几年。

我实在受不了了,于是花了点时间用 Swift 给自己造了个轮子 —— SnapClick,并且开源出来:

下面重点讲讲它对终端党最香的那个功能。


二、核心爽点:Finder 右键 → 当前目录一键拉起终端 / 编辑器

装好之后,在 Finder 里任意文件夹空白处右键,或者右键选中某个目录,菜单里会多出一组开发者专属操作:

在此处打开Terminal / iTerm2 / VS Code / Warp / Xcode

点一下,对应工具会直接以当前目录为工作路径启动

  • 翻到老项目想跑 → 右键 → VS Code,秒进编辑器
  • 想看 git log → 右键 → Warpgit log 立刻起飞
  • 想在 Xcode 打开父目录 → 右键 → Xcode

它不改变你的习惯,只是让你少打几百次 cd

image.png

三、技术实现: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

否则用户装完会一脸懵:「右键怎么没东西?」


四、顺手附赠的程序员福利

既然你都装了,下面这些程序员高频功能也一并送上:

image.png

📁 路径高级拷贝

模式用途
完整 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

image.png

新建后自动进入重命名状态,模板内容可自定义(比如 .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 ExtensionFinder 右键菜单注入
App Group + Darwin Notification主 App 与扩展 IPC
ScreenCaptureKit截图 / 录屏
CGEventTap全局快捷键拦截
AVFoundation + CryptoKit编码 / 哈希
  • ✅ 纯原生,无 Electron,无套壳
  • ✅ 完全离线,无登录、无账号、无遥测
  • Apache 2.0 开源

七、下载与体验

装好后请到「系统设置 → 通用 → 登录项与扩展 → Finder 扩展」勾选启用 FinderExtension,否则右键不会出现增强菜单。


八、最后

这个功能是我做整个 SnapClick 最初的动机 —— 因为我实在受够了 cd 长路径

作为一个独立开发者,做这种小工具其实挺费心力的:要兼顾 FinderSync 沙盒、IPC 通信、TCC 权限、不同终端的拉起姿势……每一个细节都得自己踩坑。

所以如果你看到这里,真的觉得这个工具对你有帮助 / 帮你少打了几十次 cd,麻烦顺手在 GitHub 给个 Star ⭐ —— 对我来说,这是继续维护和开发新功能的最大动力。

👉 GitHub 一键 Stargithub.com/Tyeerth/Sna…

也欢迎:

  • 🐛 提 Issue 反馈 Bug 或想要的新功能
  • 🤝 提 PR 一起把这个工具做得更好
  • 💬 在评论区留言,告诉我你最想要的下一个 Finder 右键功能

愿天下程序员,再无 cd 之苦。 🫡


📌 如果这篇文章帮到了你

  • 点个 👍「点赞」 支持一下
  • 收藏 ⭐ 方便以后查找
  • 关注我,后续会持续分享更多 macOS 原生开发 / Swift / 独立开发 的干货

项目地址:github.com/Tyeerth/Sna…觉得有用记得给个 Star ⭐ 哦!