V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Diphia
V2EX  ›  macOS

macOS 有什么工具可以将快捷键绑定到窗口(而不是程序)吗?

  •  
  •   Diphia · 2022-04-04 10:57:13 +08:00 · 3130 次点击
    这是一个创建于 965 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是希望用快捷键来直接切换到某个窗口。现在在用 Manico ,只能绑定到某个应用程序,稍微研究了一下几个讨论比较多的切换工具,似乎也都只能绑定到程序? 提前感谢~

    补充:

    1. 场景:我的一个程序同时用来写代码和写笔记,希望能够一键切换到这两个不同的窗口
    2. 尝试过多个 workspace 然后切 workspace ,但是有延迟(即使开了 reduce motion ),而且多个显示器的时候没法切换焦点
    40 条回复    2023-05-01 16:24:17 +08:00
    v2ka
        1
    v2ka  
       2022-04-04 11:13:15 +08:00
    我们不如定义两位窗口为「两个文件」

    为两个文件命名“代码” 和 “笔记”

    使用 Mac 快捷指令的打开文件操作。

    1-代码快捷指令:打开代码文件

    2-笔记快捷指令:打开笔记文件

    在快捷指令中分别为两个指令设置快捷键。

    路径:快捷指令-设置-详细信息-添加键盘快捷键

    这样就实现了你的目的。
    Diphia
        2
    Diphia  
    OP
       2022-04-04 11:22:50 +08:00
    @v2ka 感谢提供建议~
    但是代码和笔记都是很多个不确定的文件,怎么样绑在两个文件上呢?

    具体说:比如我写 test.cc 写了一半切换到 Chrome google 了一下,然后要切回来写一点代码,然后切换到笔记文件 cpp.org 写一点笔记;而下一次的文件可能是 test.pypython.org
    v2ka
        3
    v2ka  
       2022-04-04 11:38:31 +08:00
    @Diphia

    快捷键的使用意义是简化常用操作,任何快捷键只能先定义后使用。

    我们无法为不确定的文件设定快捷键;我们也不要,什么都想要。
    xtinput
        4
    xtinput  
       2022-04-04 12:14:29 +08:00
    多桌面,桌面 1 代码,桌面 2 笔记,直接 command+数字切换桌面
    Diphia
        5
    Diphia  
    OP
       2022-04-04 13:04:24 +08:00
    @v2ka 我如果能绑定到窗口不久可以了吗 =-

    @xtinput 这个有延迟(就算开了 reduce motion );然后在多屏的情况下,如果屏幕已经显示了对应的桌面,再用快捷键将无法切换焦点
    Diphia
        6
    Diphia  
    OP
       2022-04-04 13:08:08 +08:00
    @xtinput 如果无法绑定到窗口的话这个确实是最好的解决方法了😂,请教下有没有什么办法可以解决掉这两个问题的。之前用过 yabai 可以做到,但是要关 SIP ,不知道有没有不关 SIP 的解决方案。
    sleeepyy
        7
    sleeepyy  
       2022-04-04 14:06:26 +08:00
    不是很确定你要的是不是 cmd+`
    Diphia
        8
    Diphia  
    OP
       2022-04-04 14:16:33 +08:00
    @sleeepyy hhh 这个确实算是个方法啦,但是我最希望的是要不管在哪里我按下这个快捷键都直接到确定的窗口上🤣 比如可以直接从 Chrome 切到 code 或者是 note ,而不是先切到 code 再切到 note
    HOU
        9
    HOU  
       2022-04-04 14:18:28 +08:00
    仔细看了下,还是没太明白你的需求,说说我的理解:假设我用 vs code ,一个窗口写代码,一个窗口写文档,同一个应用快速切换两个窗口的话就直接用 ` command + ~ ` 快捷键,这个似乎是可以解决你第一个问题的,其实还就是相当于两个 workspace ,但是这个操作只能在同一个桌面下进行切换,延迟的话我没太明白,我这边一直是这样的用法,切换没什么延迟的感觉,
    Diphia
        10
    Diphia  
    OP
       2022-04-04 14:26:40 +08:00
    @HOU 感谢耐心阅读,可能是我表达能力不行,我最希望的是不管是在哪里我按下对应的快捷键都可以到对应的窗口。比如我现在 Ctrl+1 是 Emacs, Ctrl+2 是 iTerm, Ctrl+3 是 Chrome ,所以从 Chrome 切回 Emacs 之后可能还需要额外切一下。希望变成 Ctrl+1 是 Emacs 的一个用来写代码的窗口, Ctrl+2 是 iTerm, Ctrl+3 是 Chrome, Ctrl+4 是 Emacs 的一个用来写笔记的窗口。
    Diphia
        11
    Diphia  
    OP
       2022-04-04 14:29:04 +08:00
    @HOU 延迟指的是多桌面的情况,正常的话会有一个滑动的动画,需要时间;如果开启 Reduce Motion 则会变成淡入 /淡出,仍然会有短期的类似僵直期的时间。单个桌面确实没有延迟的问题。
    HOU
        12
    HOU  
       2022-04-04 14:43:06 +08:00   ❤️ 1
    @Diphia 现在明白了,但是个人感觉这个不太好实现,因为窗口数量,该窗口对应内容都是动态的,我想到的是 hammerspoon 脚本做快捷键应该可以轮询窗口,举例:假设设置了 emacs 快捷键为 option+e , 且存在两个以上窗口,如果我现在在 chrome 界面上,就先按 option+e 切换到 emacs 界面,再重复这个快捷键切换下一个窗口,如此轮询,能想到的只能这样了,切回 chrome 按 option+g, 多窗口同理,相当于一组快捷键管理一个程序的多个窗口,约等于快捷键切换程序,然后 command+~切换窗口,我这个操作,有点脱裤子放屁了,哈哈,帮不了你,不摸鱼了,写代码去
    Diphia
        13
    Diphia  
    OP
       2022-04-04 15:12:51 +08:00
    @HOU 哈哈哈哈 hammerspoon 似乎挺有趣的,我也去了解了解
    Mintyfrankie
        14
    Mintyfrankie  
       2022-04-04 15:15:32 +08:00 via iPhone   ❤️ 1
    初步感觉 Hammerspoon 好像可以解决?它有提供定义不同软件不同窗口的 function ,但我自己没实现过
    Diphia
        15
    Diphia  
    OP
       2022-04-04 15:25:58 +08:00
    @Mintyfrankie 谢谢,我去研究一下~
    SiLenceControL
        16
    SiLenceControL  
       2022-04-04 15:28:52 +08:00
    歪个楼 星际 2 头像好罕见 有点怀念
    Diphia
        17
    Diphia  
    OP
       2022-04-04 15:59:45 +08:00 via iPhone
    @SiLenceControL 我也很久没打了🤣
    SiLenceControL
        18
    SiLenceControL  
       2022-04-04 16:02:49 +08:00 via iPhone
    @Diphia 酒馆还是好玩
    ynyounuo
        19
    ynyounuo  
       2022-04-04 16:10:39 +08:00
    如果窗口的标题固定或有固定规律的话 yabai 可以做到
    yayiji
        20
    yayiji  
       2022-04-04 17:31:52 +08:00 via Android
    如果你喜欢键盘流,并且需要切换的是 vscode ,raycast 倒是可以实现你的需求,比如我经常常用 ccn.打开笔记(一个 vscode 项目),用 cc..打开 dotfiles (另一个 vscode 项目)
    Diphia
        21
    Diphia  
    OP
       2022-04-04 18:42:36 +08:00 via iPhone
    @ynyounuo yabai 确实太强大了,我之前一直在用,但是要关 SIP 后来换了新机器就放弃了🤣
    Diphia
        22
    Diphia  
    OP
       2022-04-04 18:43:40 +08:00 via iPhone
    @yayiji 我用的 emacs ,也是类似的。但就是希望在其他应用程序里直接切过来,不是到这个程序以后再切
    szzhiyang
        23
    szzhiyang  
       2022-04-04 19:18:03 +08:00   ❤️ 1
    Power Keys 的「光速启动」和「光速切换」功能可以很简洁地满足你的需求。

    举个例子,如果你已通过 Power Keys 为 Chrome 分配了快捷键 F1 + C ( Power Keys 允许自定义以 F1 ~ F12 为前缀的快捷键,不影响 F1 ~ F12 原本的功能,彻底避免了快捷键冲突和数量限制,还可以通过 F1 ~ F12 这 12 个分区归类快捷键),那么:

    - 如果 Chrome 未启动,按 F1 + C 就能启动它

    - 如果 Chrome 已启动,按 F1 + C 就能切换到它

    - 如果 Chrome 已经打开了多个窗口,反复按 F1 + C 就能循环切换到每个窗口

    其他 App 也是类似,感兴趣的话可以前往 https://powerkeys.github.io 免费下载使用,它是跨 macOS 和 Windows 双平台的。
    WillBC
        24
    WillBC  
       2022-04-04 19:23:43 +08:00 via iPhone
    szzhiyang
        25
    szzhiyang  
       2022-04-04 19:26:37 +08:00
    Power Keys 的思路就是用一个快捷键来统一完成启动 App 、切换 App 、切换 App 内的各个窗口这三件事情,使用起来非常干脆利落。
    normalcoder
        26
    normalcoder  
       2022-04-04 19:42:06 +08:00
    Apptivate 或许解决不了你所有问题。但对应用级别够了。对同一个程序打开多个窗口,建议并排配合触摸板或 Command ~ 切换吧
    456789
        27
    456789  
       2022-04-04 19:59:05 +08:00
    workSpace 可以把动画弄没了吧,我就感觉 mac 的动画墨迹,mac 是不是为了代码运行才把动画做的那么好
    Mintyfrankie
        28
    Mintyfrankie  
       2022-04-04 20:25:04 +08:00   ❤️ 1
    @Diphia 刚才无事帮你确认了一下 Hammerspoon 的功能实现,确认是可以的:它可以做到根据每一个窗口的标题分配一个唯一值,比如现在这个帖子的窗口就是:「 hs.window: macOS 有什么工具可以将快捷键绑定到窗口(而不是程序)吗? - V2EX (0x6000033274f8)」

    再加上 hammerspoon 绑定快捷键的功能,你的这个需求应该不难实现;有需要的话你可以再详细解释一下想要的快捷键和窗口名称,我帮你写一个初步的脚本出来。
    Diphia
        29
    Diphia  
    OP
       2022-04-04 20:39:05 +08:00 via iPhone
    @szzhiyang 谢谢,这个看起来很不错,我下个来尝试一下
    Diphia
        30
    Diphia  
    OP
       2022-04-04 20:39:33 +08:00 via iPhone
    @WillBC 这个早有耳闻,但是似乎和我的需求不太一样?
    Diphia
        31
    Diphia  
    OP
       2022-04-04 20:40:48 +08:00 via iPhone
    @456789 关掉以后还是有点延迟,切过去还要等一下就有点点难受

    @normalcoder 谢谢,这个我也去看看
    Diphia
        32
    Diphia  
    OP
       2022-04-04 20:42:30 +08:00 via iPhone
    @Mintyfrankie 太棒了,这个应该就是最好的方案了
    gjquoiai
        33
    gjquoiai  
       2022-04-04 22:29:36 +08:00
    emm 如果是 vscode 的话很简单,vscode 支持 url scheme ,只要快捷键触发 url scheme 就可以直接打开 /跳转到对应的窗口
    Diphia
        34
    Diphia  
    OP
       2022-04-04 23:14:41 +08:00
    @Mintyfrankie 再次感谢~ 用 hs.window'code@emacs'.focus() 这样的形式写了一个很基础的配置,完美符合需求。顺便发现了 hammerspoon 可以用来定义不同程序对应的输入法等等,很惊喜🤣
    Diphia
        35
    Diphia  
    OP
       2022-04-04 23:15:07 +08:00
    @gjquoiai 谢谢,但是 emacs 并不支持 =-
    fuermosi777
        36
    fuermosi777  
       2022-04-05 01:01:14 +08:00
    Hammerspoon ,根据窗口名字,我就是这么干的,用好几年了。
    fuermosi777
        37
    fuermosi777  
       2022-04-05 01:02:55 +08:00
    哦哦 看到楼上已经有人回复这个 app 了
    Mintyfrankie
        38
    Mintyfrankie  
       2022-04-05 03:21:34 +08:00
    哈哈是的,可定制性真的太强了,就是需要一定编程基础;我也是最近静下心来研究,一口气用它替换掉了 Keyboard Maestro, Bettertouchtool 和 Moom 三款软件。
    Yvette
        39
    Yvette  
       2022-04-05 03:52:45 +08:00
    zhousir5071
        40
    zhousir5071  
       2023-05-01 16:24:17 +08:00 via iPhone
    @Diphia 我也有这个需求,但是我不会编程,可以分享一下你这个配置方法吗,谢谢 OP
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1880 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:18 · PVG 00:18 · LAX 08:18 · JFK 11:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.