Hammerspoon 是一款 macOS 自动化工具:用 Lua 写脚本,把“窗口摆放、应用切换、复制粘贴、提醒通知”等操作绑定成快捷键。它不需要破解或绕过系统限制,主要就是提升日常操作效率。
官网:https://www.hammerspoon.org/
配置文档:https://www.hammerspoon.org/docs/
你可以用 Homebrew 安装,也可以从官网下载安装包。命令行安装示例:
brew install --cask hammerspoon
首次打开后,按提示到系统设置里给权限(不同系统版本名称略有差异):通常需要“辅助功能”“输入监控”“自动化/通知”等权限,确保快捷键与窗口控制正常工作。
Hammerspoon 的入口配置是:~/.hammerspoon/init.lua。建议把功能拆成多个文件,保持可维护:
~/.hammerspoon/init.lua
~/.hammerspoon/modules/window.lua
~/.hammerspoon/modules/launcher.lua
在 init.lua 里按需 require 引入即可。
先做一个“自解释”的帮助弹窗,后面每加一个快捷键就把说明补上:
local help = [[ Alt+Cmd+H 显示帮助 Alt+Cmd+R 重新加载配置 Alt+Cmd+1 左半屏 Alt+Cmd+2 右半屏 ]] hs.hotkey.bind({"alt","cmd"}, "H", function() hs.alert.show(help, 4) end)
写脚本最烦的是改完还要点菜单重载。加一个重载键:
hs.hotkey.bind({"alt","cmd"}, "R", function() hs.reload() hs.alert.show("Hammerspoon reloaded") end)
把“窗口摆好”变成肌肉记忆:
local function moveTo(unit) local win = hs.window.focusedWindow() if not win then return end local screen = win:screen() local frame = screen:frame() win:setFrame({ x = frame.x + frame.w * unit.x, y = frame.y + frame.h * unit.y, w = frame.w * unit.w, h = frame.h * unit.h, }) end hs.hotkey.bind({"alt","cmd"}, "1", function() moveTo({x=0, y=0, w=0.5, h=1}) end) -- 左半屏 hs.hotkey.bind({"alt","cmd"}, "2", function() moveTo({x=0.5, y=0, w=0.5, h=1}) end) -- 右半屏 hs.hotkey.bind({"alt","cmd"}, "C", function() moveTo({x=0.15,y=0.1,w=0.7, h=0.8}) end) -- 居中
提示:有刘海或多屏时,使用 screen:frame() 通常比全屏尺寸更贴近日常可用区域。
用一个快捷键把常用应用切到前台(已打开就激活,没打开就启动):
local function launch(app) return function() hs.application.launchOrFocus(app) end end hs.hotkey.bind({"alt","cmd"}, "T", launch("iTerm")) hs.hotkey.bind({"alt","cmd"}, "B", launch("Google Chrome")) hs.hotkey.bind({"alt","cmd"}, "S", launch("Slack"))
如果你经常在多个内容之间切换,给剪贴板做点“可见性”:
local last = hs.pasteboard.getContents() or "" hs.timer.doEvery(0.8, function() local now = hs.pasteboard.getContents() or "" if now ~= "" and now ~= last then last = now hs.alert.show("Copied: " .. string.sub(now, 1, 40)) end end) hs.hotkey.bind({"alt","cmd"}, "K", function() hs.pasteboard.clearContents() hs.alert.show("Clipboard cleared") end)
1) 先从 3-5 个最常用动作开始;2) 把所有快捷键写进“帮助弹窗”;3) 每周根据使用频率微调组合键;4) 如果和系统/应用快捷键冲突,优先改 Hammerspoon 的绑定。
按这个节奏迭代,一周内就能把高频重复操作明显压缩。