macOS 用 Hammerspoon 自定义快捷键:安装、脚本与 5 个常用自动化示例

适合谁用:把重复动作变成快捷键

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 引入即可。

示例 1:一键显示快捷键帮助(自用说明书)

先做一个“自解释”的帮助弹窗,后面每加一个快捷键就把说明补上:

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)

示例 2:修改配置后快捷键一键生效(Reload)

写脚本最烦的是改完还要点菜单重载。加一个重载键:

hs.hotkey.bind({"alt","cmd"}, "R", function() hs.reload() hs.alert.show("Hammerspoon reloaded") end)

示例 3:常用窗口布局(左右分屏 / 居中)

把“窗口摆好”变成肌肉记忆:

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() 通常比全屏尺寸更贴近日常可用区域。

示例 4:更快的应用启动/切换(Launcher)

用一个快捷键把常用应用切到前台(已打开就激活,没打开就启动):

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"))

示例 5:剪贴板增强(复制后提示 + 快速清空)

如果你经常在多个内容之间切换,给剪贴板做点“可见性”:

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 的绑定。

按这个节奏迭代,一周内就能把高频重复操作明显压缩。

用户评论 (0)

登录后参与讨论

立即登录 注册账号

暂无评论,快来抢沙发吧~

操作成功