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

终于找到了 macos 切换程序的最佳方式

  •  
  •   x97bgt · 2021-11-02 09:27:35 +08:00 · 16238 次点击
    这是一个创建于 1104 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的方式:先按住w(相当于 prefix key ),然后按一下j切换到 iTerm ,按一下j切换到 VSCode ,按一下c切换到浏览器。不用再 cmd+tab 一个个找了,也不会占用现有的按键,畅快。

    多亏了 karabiner+goku 这两个软件。

    第 1 条附言  ·  2021-11-02 18:37:15 +08:00
    大家提了很多方案,但大体是
    - 使用快捷键,比如可以用 manico 和 hammerspoon 。但这很容易跟软件起冲突。
    - 先调出一个软件的调度中心,再选择应用。spootlight 、alfred 都是这样。但这样太慢了,而且会花费时间选择,不丝滑。
    - 使用鼠标。再见,鼠标更慢,尤其是在专心写代码时。

    我这个方案,可以在 IDE 、命令行、浏览器之间无缝切换,手都不需要离开键盘。
    第 2 条附言  ·  2021-11-02 19:25:56 +08:00
    关于配置,可以看 #64 贴的 gist 片段
    128 条回复    2022-08-31 21:36:43 +08:00
    1  2  
    LuciusChen
        101
    LuciusChen  
       2021-11-03 09:25:56 +08:00
    @x97bgt 分屏什么 bug 呢?有问题可以提 issue
    xidaduo
        102
    xidaduo  
       2021-11-03 09:27:00 +08:00
    @lycpang 卸载重装试一试,我之前也是不显示,后面不知道怎么它就自己好了,现在都会显示了
    x97bgt
        103
    x97bgt  
    OP
       2021-11-03 09:36:42 +08:00
    @Yvette
    @booscopy 我指的是窗口分屏问题。我的情况是这样,比如窗口在右上 1/4 ,我想变成左半 1/2 ,那按用 hammerspoon 时,会经过右上 1/4->右半 1/2->左半 1/2 ,没法一步变成左半 1/2 。

    我用的 API 是`window:moveToUnit`,也试过`window:setFrame`之类的 API ,但都一样。

    所以就放弃了 hammerspoon 。不知道是不是系统的问题,我是 Monterey 。
    x97bgt
        104
    x97bgt  
    OP
       2021-11-03 09:38:18 +08:00
    @LuciusChen 我在#103 楼描述了这个问题。

    我接触 hammerspoon 没多久,还以为是我的使用姿势不对。看来你们都用得很丝滑。
    LuciusChen
        105
    LuciusChen  
       2021-11-03 10:15:56 +08:00
    @x97bgt 看了下你说的问题,我不存在这样的问题。用的这个 hs.window:move(rect[, screen][, ensureInScreenBounds][, duration]) --> hs.window object
    jinzhongyuan
        106
    jinzhongyuan  
       2021-11-03 10:26:26 +08:00
    @x97bgt 你用过 mac 没?
    skys215
        107
    skys215  
       2021-11-03 10:30:33 +08:00
    调用软件调度中心后,输入软件名就好了
    x97bgt
        108
    x97bgt  
    OP
       2021-11-03 10:33:09 +08:00
    hqs0417
        109
    hqs0417  
       2021-11-03 10:38:13 +08:00
    @registered 赞,SNAP 真是方便
    zitup
        110
    zitup  
       2021-11-03 11:01:30 +08:00
    @cp19890714 原来是我之前,直接应用全屏了,导致桌面名字不是桌面 2..而是应用的名字,所以没出现切换到桌面 2 。貌似全屏后没办法修改桌面名字,只能最大化了
    yuancoder
        111
    yuancoder  
       2021-11-03 11:05:39 +08:00
    太折腾了,正常情况下,写代码的时候并不会很高频率的进行切换,高频率的切换反而效率更低。
    cmd + tab , 鼠标,spootlight 够用了。
    yahz
        112
    yahz  
       2021-11-03 11:08:58 +08:00
    HyperSwitch + alfred
    unco020511
        113
    unco020511  
       2021-11-03 11:21:25 +08:00
    你整的太复杂了,直接多桌面,然后配合触控板三指左右滑
    Yvette
        114
    Yvette  
       2021-11-03 11:39:39 +08:00
    @x97bgt 我在 Monterey 下用 moveToUnit 重写了一下我现在用的窗口逻辑,没有遇到你说的这个现象,窗口的在横纵方向上都是同时变化的

    正常来讲这一行应该就可以实现你说的把右上角的窗口一步移到左半屏的那个效果 hs.window.focusedWindow():moveToUnit({x = 0, y = 0, w = 0.5, h = 1})

    实在不行,也可以尝试 hs.window.animationDuration = 0 直接跳过动画效果

    愿意的话可以把你能够复现问题的脚本代码贴上来,这样其他人也可以帮忙看看
    x97bgt
        115
    x97bgt  
    OP
       2021-11-03 13:52:46 +08:00
    @Yvette 我用的是 hs.window('[0, 0, 50, 100]', 0),跟你是一样的方法,第二个参数就是设置 animationDuration 的。

    感觉要么是环境原因要么是 bug 。我准备截图提个 issue 了
    x97bgt
        116
    x97bgt  
    OP
       2021-11-03 15:56:33 +08:00
    @Yvette 上面贴错,是 hs.window.focusedWindow():moveToUnit('[0, 0, 50, 100]', 0)。
    Helios0
        117
    Helios0  
       2021-11-03 17:20:18 +08:00
    @pansongya 试试 Contexts
    szzhiyang
        118
    szzhiyang  
       2021-11-04 10:04:31 +08:00
    看了一圈,很庆幸自己发明了可能是世上最好的窗口切换方法。
    wd
        119
    wd  
       2021-11-04 10:15:01 +08:00
    @x97bgt 你说的窗口在右上那个例子,你是按一次窗口大小变一次,然后多次之后能变到你想要的情况是么?还是说会只需要按一次健,然后会看到缓慢的动画效果?

    如果是前面那种,我遇到过这个情况。你有用 https://github.com/dbalatero/VimMode.spoon 么?这里面这个 patch https://github.com/dbalatero/VimMode.spoon/blob/master/lib/utils/ax.lua#L29-L41 会导致这个问题。

    你可以简单的试试看把所有其他配置都禁用,然后看看是不是 ok 了。要注意那个 patch 一旦打过之后,就只能重启 app 才行。建议你禁用之后重启下电脑。
    nuanshen
        120
    nuanshen  
       2021-11-04 10:34:29 +08:00
    @11dad master3 确实很好用
    Diphia
        121
    Diphia  
       2021-11-04 11:04:24 +08:00
    @x97bgt 只用 Ctrl 和数字键的话应该没什么冲突,我还没碰到过有冲突的。但是想用其他键确实就很束手束脚了,QWERTASDF 这些位置很好的键大多没法用,很可惜。
    x97bgt
        122
    x97bgt  
    OP
       2021-11-04 11:45:44 +08:00
    @wd 是第一种,按了多次才能得到最终效果,我刚好也用 VimMode 。。。。你是直接要把 patch 注释掉么?
    wd
        123
    wd  
       2021-11-04 11:57:15 +08:00
    @x97bgt 我不用他。我之前借鉴了一些他的代码,然后就遇到了这个问题。我自己测试 `AXManualAccessibility` 这个 patch 是不影响的。另外那个会导致那个问题。你可以试试看只保留这个 patch 。

    如果你把这两个 patch 都注释掉的话,有些 electron 的 app 里面,例如 slack 就不能准确的在输入文本框附近显示那个状态了。
    wd
        124
    wd  
       2021-11-04 11:58:32 +08:00
    btw, 我是写这个 plugin https://github.com/wd/IMIndicator.spoon 参考那个代码遇到的问题。。做个广告。。
    x97bgt
        125
    x97bgt  
    OP
       2021-11-04 12:18:42 +08:00
    @wd 确实把 VimMode 注释掉,然后重启就解决了。用 VimMode 的时,窗口移动会有动画。但没有 VimMode 的移动,就不存在动画,一下子就移过来了。。

    VimMode 其实有点鸡肋,我也不用了。多谢老哥,问题解决了。
    frankynwa
        126
    frankynwa  
       2021-11-05 00:25:25 +08:00
    用 alfred workflow 例子里的 advanced hotkey
    trimleo
        127
    trimleo  
       2021-11-17 20:56:28 +08:00
    感谢分享,了解了 goku 这个应用,也用上了这种方式,确实效率比之前我切出 Alfred 快多了(虽然 Alfred 也变成了肌肉记忆)
    Anna1879
        128
    Anna1879  
       2022-08-31 21:36:43 +08:00
    @x97bgt 其实快捷键统一好逻辑就不会发生冲突。
    比如我用 Keyboard Maestro 同意设定快捷键为`option+字母`,不够还可以加上符号和数字,绝对满足需求也容易联想,软件英文名开头字母。
    这个快捷键搭配用得应该是比较少的,都是输入一些不常用的字母。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2675 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:04 · PVG 12:04 · LAX 20:04 · JFK 23:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.