dantifer
V2EX  ›  macOS

介绍一下我使用 karabiner 和 hammerspoon 的经验

  •  
  •   dantifer · 9h 4m ago · 913 views

    有几个诉求:

    1. 能够在快速启动和切换 app
    2. 能够方便的把 app 移动到不同的显示器上
    3. 能够方便的调整 app 窗口的大小,比如全屏,等
    4. 其他杂七杂八的需求,比如调整音量,屏幕亮度,关屏之后自动关闭蓝牙等

    解决方案就是 karabiner 和 hammerspoon 。

    工作流:

    1. 使用 HyperKey + C ,就会自动打开 Chrome. 如果 Chrome 已经打开,就会切换到对应的窗口。
    2. 然后按 HyperKey + ], 就会把 Chrome 移动到下一个显示器上,然后再按 HyperKey + Enter, 就会在新显示器上全屏(非 macos 的全屏,只是调整窗口到全屏幕大小)显示 Chrome 。
    3. 如果想并排显示两个程序,就 HyperKey + ->, chrome 就只占据屏幕的右半边。另外一个程序,按 HyperKey + <-, 则它就会占据屏幕的左半边。

    =========

    Karabiner 的作用,是创建一个 hyper key. 我是把 caps lock 键,映射成了 control + option + command + shift. 所以按下 caps lock 键,就相当于触发了这四个键的组合。

    hammerspoon 的作用是根据快捷键,来做各种操作。目前配置了如下的快捷功能:

    HyperKey: {"cmd", "alt", "ctrl", "shift"}

    HyperKey + l: lock screen

    HyperKey + b: show battery status on screen

    HyperKey + [: move app to left screen

    HyperKey + ]: move app to right screen

    HyperKey + return: maximize current window

    HyperKey + left: resize current window to the left half of the screen

    HyperKey + right: resize current window to the right half of the screen

    HyperKey + up: resize current window to the top half of the screen

    HyperKey + down: resize current window to the bottom half of the screen

    HyperKey + x: launch application by x (see key2App in key-bindings.lua, you can customize it in your own way)

    {"CMD","Ctrl"} + up: volume up

    {"CMD","Ctrl"} + down: volume down

    {"option","Ctrl"} + up: screen brightness up

    {"option","Ctrl"} + down: screen brightness down

    =========

    github repos:

    https://github.com/zfdang/macos-softwares-and-tips

    https://github.com/zfdang/hammerspoon-config

    28 replies    2026-06-29 15:08:57 +08:00
    di11wei
        1
    di11wei  
       8h 13m ago via iPhone
    如果 Karabiner 只用来设置一个 hyperkey 是不是有点「太重了」呢。
    推荐用下 https://hyperkey.app/versions ,单纯的设置 hyperkey 的程序。
    gap
        2
    gap  
       7h 50m ago via iPhone
    我只用 hammerspoon ,hyperkey 是右 cmd
    dantifer
        3
    dantifer  
    OP
       7h 6m ago
    @di11wei 之前不知道 kyperkey 这个程序,一直使用 Karabiner, 也是免费的,就没有再换。
    以后可以试试 Hyperkey
    dantifer
        4
    dantifer  
    OP
       7h 5m ago
    @gap 右 cmd 最大的问题是,常用操作都得两只手才行,cap + 字母,很多时候左手就够了
    jheroy
        5
    jheroy  
       6h 9m ago via iPhone
    karabiner 本身就能做两种操作,不需要单独安 hammmerspoon 吧, 另外 karabiner 强的地方是可以吧键盘上任意键作为修饰键, 比如我是按住 o 不放再按 q 就是打开 QQ ,单击 o 还是输出 o 。 按住 w 不放再按 hjkl 是移动窗口位置, 按住 r 加 hjkl 是改变窗口大小等等。karabiner 本身的配置有点繁琐,推荐一个生成配置的工具:GokuRakuJoudo 可以通过一个简化配置直接生成 karabiner 的配置。
    gpt5
        6
    gpt5  
       5h 46m ago   ❤️ 1
    我以及身边好几个人,离开 karabiner 就不会用 mac 了。强烈希望苹果给作者一些经济奖励。
    q534
        7
    q534  
       5h 40m ago
    我目前探索到最好用的是,把 caps 定义成短按切换输入法,长按 hyperkey ,配合 hammer 缩放窗口或者快捷打开常用的几个程序。能替代好几个 app ,还方便自定义行为。
    ly1878
        8
    ly1878  
       5h 38m ago
    注意将 hyper+w 逗号 句号 问号 四个组合设置为无效值,否则按下时会产生系统诊断。
    ly1878
        9
    ly1878  
       5h 37m ago
    @q534 我喜欢设置成短按为 Esc
    @gpt5 我也是如此,没有 KE 永不好 mac 了。
    ly1878
        10
    ly1878  
       5h 37m ago
    @dantifer op 大概也会喜欢用 chrome 的 vimum C 这款扩展吧。
    q534
        11
    q534  
       5h 30m ago
    @ly1878 #9 啊?那原来的 ESC 干什么
    11ze
        12
    11ze  
       5h 26m ago
    我一直在用 karabinar + https://github.com/Vonng/Capslock ,超级好用
    ruolis
        13
    ruolis  
       5h 15m ago
    目前使用 Karabiner 就增加了一个映射,短按 shift 切换输入法
    fds
        14
    fds  
       5h 8m ago
    Karabiner 之前升级系统是总有几天不能用,所以后来我统一用回 hammerspoon 了。
    我也是用 @jheroy 类似的 launcher 模式,在 hammerspoon 里仿造了一个,按住任意键超过 300ms 激活一个配置好的模式(并显示一个提示框),然后按另一个键启动或切换 app 、执行脚本等等。提示框里有每个键的功能,所以不怕遗忘。不过 hammerspoon 灵敏度不如 Karabiner ,会影响按键本身的手感,所以我都是配在 tab 斜杠等等不常用的键上,两组基本就够用。tab+启动时,只用左手就能完成,很方便。
    还有一些小功能:自动把鼠标移到激活的窗口中心;根据 idle 情况提醒我休息;屏幕配置热区激活调度中心。
    ly1878
        15
    ly1878  
       4h 52m ago
    @q534 可以自定义,也可以设置成 hyper+esc 为切换输入法,因为我删掉了自带的 abc ,所以用不上切换输入法。我感觉 Esc 使用频率更高。
    dantifer
        17
    dantifer  
    OP
       4h 27m ago
    @q534 我发现“切换”输入法这个语义不清晰,最好用的反而不是切换,而是直接设定到英文或者中文。避免你自己也不知道到底切换到哪个了。我是把右 shift 定义成,切换输入法到英文。
    SachinBeyond
        18
    SachinBeyond  
       4h 19m ago
    @jheroy 我有一个疑问,关于按住 o 不放再按 q 就是打开 QQ .

    正常情况下(在没有配置 o+q 的时候) o 这个按键是按下时触发, 也就是按下 o 就会输出字符 o. 一旦你配置了 按住 o 不放再按 q 就是打开 QQ 那么 o 是不是就变成了 松开时触发, 也就是只有松开 o 的时候才会输出 o?
    那这样的话 如果你打字比较快的话 比如 ong, 按下 n 的时候 o 可能还没有释放, 所以可能会输出 nog.

    我说正确吗?
    jheroy
        19
    jheroy  
       4h 3m ago via iPhone
    @SachinBeyond 不会组合键是有严格顺序的, 只有 o 按下 q 按下,q 释放,o 释放的顺序才能触发(按快捷键一般是这样的动作),如果是 o 按下,q 按下 o 释放 q 释放会触发输入 oq
    SachinBeyond
        20
    SachinBeyond  
       3h 23m ago
    @jheroy #19 不太懂 mac 中按键是怎么触发的.

    我有点好奇, 比如 我 快速按下 ong 三个字符, 但是 按下 n 的时候 o 还没有释放,按照我的理解:o 是在 up 的时候才会输出字符 o, 所以 最终得到的字符就是 nog, 而不是 ong.
    根本原因在于 配置了 o & p 这个热键, 导致 原本 o 是 down 的时候输出字符 o 变成了 只有 o 是 up 的时候才会输出字符 o
    jheroy
        21
    jheroy  
       3h 2m ago via iPhone
    @SachinBeyond 那你 n 释放肯定在 o 释放后面啊所以 n 还是在 o 后面,除非你故意按住 n 不放,正常打字是不会这样的吧,基本上每个键敲击时间差不多。
    SachinBeyond
        22
    SachinBeyond  
       2h 48m ago
    @jheroy #21 windows 中 字符按键 是 按下时触发, 就是说 ong 中的 n 在按下的时候就会触发输出字符 n, 而 由于 配置了 o & q 打开 qq, o 按键是 释放时触发, 所以 Windows 中不关心 n 的释放 在 o 的释放前面还是后面. 所以只要 o 按下没有释放的时候 又按下了 n ,必然就是 no 而不是 on.

    至于 mac 我不太清楚, 这也正是我疑惑的地方.
    jheroy
        23
    jheroy  
       1h 37m ago via iPhone
    @SachinBeyond 这和系统没关系,实际上 windows 也可以装 kmonad ,也能实现释放才输入字符。
    migim
        24
    migim  
       1h 4m ago
    @SachinBeyond 这类配置的触发条件其实挺严的,默认阈值是在 50 毫秒内按下所有按键,基本等于同时按下才能触发。按键顺序也不是必要的,当然想调也有对应参数
    Immortal
        25
    Immortal  
       59 mins ago
    以前也折腾过 OP 说的两个软件,虽然很 Hack,还是不够方便.
    后来发现 Raycast(启动工具)和 Rectangle(窗口管理工具)完全能够满足上面 OP 说的需求.

    我在 Raycast 中给窗用的软件设置了快捷键(CMD+N).对于 10 个不同的常用应用.直接可以达到 OP 说的"没有就启用,启用了就打开应用窗口".
    至于 Rectangle,开源且免费,开箱即用,记住几个常用组合快捷键即可.
    dantifer
        26
    dantifer  
    OP
       53 mins ago
    @Immortal 其实你要是不启用 hyperkey ,而是愿意直接使用 CMD 的话,hammerspoon 一个就够了...
    SachinBeyond
        27
    SachinBeyond  
       26 mins ago
    @jheroy #23 这么有意思吗? Windows 上我用 autohotkey 卡了很久, 我取看看 kmonad , 谢谢兄 der
    SachinBeyond
        28
    SachinBeyond  
       4 mins ago
    @migim
    @jheroy #23
    https://i.postimg.cc/SKDk2TwZ/FS-2026-06-29-150436.png
    QMK 存在这样的问题, 我觉得 mac 也有这样的问题.
    最好的解决方案就是 不要用 字母按键作为 修饰键.不然就会影响正常的连打输入
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5463 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 104ms · UTC 07:13 · PVG 15:13 · LAX 00:13 · JFK 03:13
    ♥ Do have faith in what you're doing.