一个被 macOS 用户忍了很久的问题

先做个测试。你在编辑器里同时开了两个项目窗口,想从 A 切到 B,按下 ⌘-Tab——发生了什么?

它把你切到了”编辑器”这个应用,而不是你想要的那个窗口。 再按一次 ⌘-Tab,可能跳去别的应用了。你只好松开键盘,去点 Dock 图标、或者用 `⌥-`` 一个个窗口翻——如果你的项目窗口有五个,这个动作就重复五次。

macOS 的窗口管理逻辑一直是争议点:

  • ⌘-Tab 切换的是”应用”,不是”窗口”——同一个 App 的多个窗口不在切换范围里
  • `⌥-`` 能在当前 App 内切窗口,但只能循环,看不到全貌,窗口多了靠盲翻
  • Mission Control 可视化够好,但不行——有动画延迟、要鼠标指、窗口一多全缩成小方块认不出来
  • 跨 Space 找窗口更痛苦:⌃-方向键切 Space,慢,而且切过去之后还得再找

这套组合拳对付”两三个窗口”够用,一旦进入”十几个窗口 + 多个 Space”的工作状态,就开始消耗你的注意力和时间。

现有方案:不是没有,是不够顺

公平地说,这不是没解。市面上已经有一批工具:

  • macOS 原生方案:⌘-Tab + `⌥-`` + Mission Control,免费但如上所述,窗口维度基本缺失;
  • AltTab:开源免费的窗口切换器,功能齐全,社区活跃;
  • Witch / Hyperswitch:付费方案,走精细化路线。

它们都能解决问题。但我最近用到一个新的开源项目 Switch,在”键盘驱动”这个点上做得非常纯粹——用了几周,决定写篇文章推荐。

Switch 是什么

一句话:一个键盘驱动的 macOS 窗口切换器。

  • 作者:Sanyam Garg(独立开发者)
  • 语言:Swift
  • 价格:免费
  • 要求:macOS 14+,已通过 Apple 公证(Notarized)
  • 开源:github.com/Sanyam-G/switch,588 Stars
  • 许可证:FSL-1.1-MIT(源码可见,非竞争性使用免费,2028 年自动转为 MIT)

它做的事很简单:把”所有窗口”平铺到一个选择面板里,用键盘完成切换——从触发到落地,手不离键盘。

原生 Cmd+Tab 与 Switch 的对比

核心功能:为什么它比原生顺手

1. 切换的是「所有窗口」,不是「应用」

⌘-Tab 在 Switch 里被重新定义:列出的是每一个窗口。同一个 App 的三个窗口、三台显示器的窗口、所有 Space 的窗口,全在同一个面板里。你要哪个,选哪个。

想只在一个应用内切换?`⌥-`` 依然是”当前 App 内循环”的语义,两个快捷键各司其职、不打架。

2. 打字即过滤

这是我最喜欢的功能。面板展开后直接打字,实时过滤窗口——按标题、按应用名都行。

比如输入 docs,只剩标题里带 “docs” 的窗口;输入 chrome,只剩浏览器。相比”在缩略图里用眼睛找”,打字过滤是确定性操作:你不需要看,你只需要记得名字。

3. 数字键直选 + Vim 导航

  • 面板里的窗口带编号,1-9 直接选(支持小键盘)
  • 可选 Vim 风格 H J K L 方向键导航——不用离开主键盘区

手速快的人会喜欢这个设计:⌘-Tab → 打字 → 2 → 回车,全程不超过一秒。

4. 跨 Space:一键把窗口拉过来

这是 macOS 原生体验里完全没有的能力:

其他 Space 上的窗口会出现在面板里,标记 OTHER SPACE。选中它,窗口直接移动到当前 Space——没有 Mission Control 的动画,没有”先切过去”这一步。

如果你习惯用多个 Space 分隔”工作/沟通/娱乐”,这个功能会立刻改变你的习惯:不需要来回切 Space 了,需要哪个窗口,直接拉过来。

(不喜欢混合?Settings → Cross-Space 可以关掉,或改成按最近使用排序。)

5. 其他贴心细节

  • MRU 排序:最近使用的窗口排最前——符合直觉,减少找的时间
  • 后台预热:面板在后台预加载,⌘-Tab 按下去瞬间弹出,没有加载感
  • 垂直列表模式:Settings → Behavior → Vertical list,单列布局,带应用图标 + 标题 + 缩略图,比平铺更适合窄屏/多窗口
  • Sticky 模式:松开 ⌘ 后面板不关闭——适合”挑一个窗口看看”的犹豫场景,Esc 取消
  • 窗口操作键:⌘W 直接关窗口、⌘Q 退出应用、⌘H 隐藏——在切换器里就把杂事办了
  • 排除应用:把不想看见的窗口(比如某个常驻后台的 App)加进黑名单
  • 内置更新:每天后台检查更新,Sparkle + EdDSA 签名校验

安装:一行命令

Homebrew 用户:

1
brew install --cask Sanyam-G/switch/switch

或者从官网下载 .dmg:https://switch-dev.sanyamgarg.com

装完首次运行需要授予「辅助功能」权限(macOS 窗口类工具都需要这个,属正常要求),然后就能用了。

卸载也同样干净:

1
brew uninstall --cask Sanyam-G/switch/switch

快捷键速查

快捷键 作用
⌘-Tab 打开切换器,列出所有窗口
`⌥-`` 当前应用内切换窗口
直接打字 实时过滤窗口
1-9 / 小键盘 按编号直选
H J K L Vim 风格导航(可选开启)
⌘W / ⌘Q / ⌘H 关窗口 / 退出应用 / 隐藏应用
↵ / Esc 确认切换 / 取消

适合谁用

  • 窗口开得多的人:编辑器多项目、浏览器多窗口、终端多会话——数字键直选比翻 Tab 快一个量级;
  • 重度多 Space 用户:跨 Space 直接拉窗口,这是原生没有的能力;
  • 键盘党 / Vim 用户:打字过滤 + HJKL 导航,全程不碰鼠标;
  • 从 Windows 过来的人:Windows 的 Alt+Tab 本来就切”所有窗口”,Switch 让 macOS 找回了这种熟悉感。

可能不需要的场景:如果你的日常就是”两三个窗口来回切”,原生 ⌘-Tab 够用了,装它反而多一层学习成本。

写在最后

macOS 的窗口切换体验,多年来的槽点其实很具体:⌘-Tab 缺了”窗口”这个维度。 Switch 没有花哨的概念,就是把这一块补齐了——所有窗口一屏列出、打字过滤、数字直选、跨 Space 拉取,每一步都在减少你的手部动作和注意力开销。

它免费、开源、已公证、Swift 原生实现,作者一个人维护,更新还挺勤(4 月发布,持续迭代到 9 月)。对效率工具感兴趣的话,值一个 brew install 的时间成本。

装完记得去 Settings 里把 Sticky 模式和跨 Space 都试一遍——这两个是最容易被忽略、但用过就回不去的功能。

项目地址:https://github.com/Sanyam-G/switch
官网:https://switch-dev.sanyamgarg.com