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

Karabiner-Elements 配置:输入法一键切换 & CapsLock 等改键

  •  6
     
  •   Sylv · 2019-05-20 09:03:53 +08:00 · 14554 次点击
    这是一个创建于 2024 天前的主题,其中的信息可能已经有所发展或是发生改变。

    输入法切换改键

    这套输入法切换方案我已经使用多年了,个人认为是 macOS 下最佳的中英文输入法切换方案,这几天有几位朋友询问是如何用 Karabiner-Elements 实现的,我就整理了一下分享出来。

    实现的效果

    • 短按左 Command ⌘ → 切换到英文输入法
    • 短按右 Command ⌘ → 切换到中文输入法
    • 短按左右 Shift ⇧ → 切换输入法
    • 左右 Command ⌘ + 空格 ␣ → 切换输入法

    长按或者组合键按左右 Command ⌘ 和 Shift ⇧ 时仍保留原有修饰键功能。

    为什么这样改键

    问题一

    大部分中文输入法都带有中文和英文两种输入模式,再加上系统自带的英文输入法,实际上我们使用的时候会有 3 种输入状态:

    • 英文输入法的英文输入状态
    • 中文输入法的英文输入状态
    • 中文输入法的中文输入状态

    而这 3 种输入状态要用两种快捷键在它们之间切换,我相信很多朋友都有在这 3 种输入状态中纠缠不清的困恼。但其实我们只需要中英两种输入状态,有一种英文输入状态是多余的,如果将其去除掉,整个中英文输入切换过程就会简单很多。

    一种解决方法是:用奇技淫巧去禁用系统自带的英文输入法,只使用中文输入法来输入中英文。但这并不是很靠谱,因为系统有的地方会强制使用英文输入法,禁用掉英文输入法可能会导致在一些地方无法输入密码等问题。

    更好的解决方法是:禁用掉中文输入法的英文输入模式,只使用中文输入法来输入中文,使用英文输入法来输入英文,各司其职,各尽其责。

    但是 macOS 默认切换输入法的快捷键( Command ⌘ + 空格 ␣ / Control ⌃ + 空格 ␣)用起来并不是很顺手,很多朋友应该和我一样都是习惯用 Shift ⇧ 来切换中英两种输入状态。因此这个改键方案首先实现了用 Shift ⇧ 来切换输入法,这样在中英输入法之间切换就会方便很多,我也保留了默认的 Command ⌘ + 空格 ␣ 快捷键(可以按需选择是否启用,或者像我一样只启用右 Command ⌘ + 空格 ␣,左 Command ⌘ + 空格 ␣ 是我的 Alfred 快捷键)。

    问题二

    除了这个问题以外,传统的输入法切换还有个痛点:需要先判断当前的输入状态才能决定是否要切换,特别是 macOS 菜单栏的输入法图标并不是很醒目,需要将视焦从打字区移动到右上角菜单栏才能知道现在是什么输入状态,容易打断思路,而且这个过程就像 USB 要两次才能插对一样经常会判断出错。

    这个问题的终极解决方法就是给中英文输入法分别设置单独的快捷键,而且最好是一键快捷键,这样打字过程中就不再需要判断当前输入法状态,可以直接无脑一键切换到所需的输入法。 我个人认为最适合担当这组快捷键的就是左右 Command ⌘ 键(左 ⌘ → 英文;右 ⌘ → 中文),在用标准手势打字时,左右 Command ⌘ 可以用左右大拇指很方便地按到,而且具有对称性,容易和中英文输入法建立联系养成肌肉记忆。

    如何实现的

    Karabiner-Elements 其实是有个 select_input_source 方法可以直接切换到指定输入法的,原本要实现上述的一键切换是挺简单的,几行配置就行。

    但是 select_input_source 底层使用的 TISSelectInputSource macOS 输入法切换 API 长期以来对 CJKV (中文、日文、韩文、越南文)这类较为复杂的输入法的切换存在问题:经常会切换到中文输入法后,菜单栏的输入法图标已经变为中文了,但是打出来的字却还是英文。( Keyboard Maestro 等使用相同 API 来切换输入法的工具都有这个问题。)

    因此为了规避这个问题,不得不让 Karabiner-Elements 使用一种稍微复杂点的变通方法来实现我们想要的改键(⇧ → 切换输入法;左 ⌘ → 英文;右 ⌘ → 中文):

    1. 将系统切换输入法的快捷键更改为一个不存在的键 F18
    2. 短按 Shift ⇧(切换快捷键)时,输出 F18 来切换输入法。
    3. 短按左 Command ⌘(英文快捷键)时:
      • 如果当前输入法已经是英文 → 什么都不做 → 英文输入法
      • 如果当前输入法是中文 → 输出 F18 来切换输入法 → 英文输入法
    4. 短按右 Command ⌘(中文快捷键)时:
      • 如果当前输入法是英文 → 输出 F18 来切换输入法 → 中文输入法
      • 如果当前输入法已经是中文 → 什么都不做 → 中文输入法

    这样就间接实现了我们想要的效果,但是这个变通方法只有当系统只有中英两种输入法时才会有效,要不然一键切换时可能会误切换到不是想要的第三种输入法。因此如果你有使用三种或以上输入法,目前这套改键配置并不适用,只有等未来 TISSelectInputSource API 的问题得到修复(这问题好几年了,我怀疑根本不会修复了?),才能直接用 select_input_source 来实现这种一键切换效果了。

    使用方法

    1. 点此导入 Karabiner-Elements 配置

    2. 启用全部或部分改键规则。

    3. 打开 系统偏好设置( System Preferences ) > 键盘( Keyboard ) > 快捷键( Shortcuts ) > 输入法( Input Sources ),在 选择上一个输入法( Select the previous input source )快捷键处,短按 Shift ⇧ 键(此时已被改键为 F18),将此快捷键修改为 F18

    4. 修改你的中文输入法设置,禁用掉英文输入模式,或者将初始状态设置为中文,并禁用掉中英文状态切换快捷键,以我使用的搜狗输入法为例:

    注:此配置理论上应该支持所有简体中文输入法(输入法语言代码为 zh-Hans),如果你使用的是繁体输入法,需要手动将配置文件内的所有 zh-Hans 替换为 zh-Hant



    CapsLock / Control / Tab 改键

    除了输入法切换改键以外,顺便也分享下我还使用的一些改键配置。

    实现的效果

    • CapsLock ⇪:

      • 短按 → Esc ⎋
      • 长按或者组合键 → Control ⌃
    • 左 Control ⌃:

      • 短按 → CapsLock ⇪
      • 长按或者组合键 → Super Key (⌃⌥⌘)
    • Tab ⇥:

      • 短按 → Tab ⇥
      • 长按或者组合键 → Hyper Key (⇧⌃⌥⌘)

    为什么这样改键

    CapsLock ⇪ 改成 Control ⌃ 和 Esc ⎋ 就不细说了,对于有需求的用户,算是较为公认的最佳改键方案了,特别好用,谁用谁知道。

    CapsLock ⇪ 改成 Control ⌃ 后,左 Control ⌃ 就功能重复了,而我有时候还是需要用大写锁定键的,所以我就把短按左 Control ⌃ 改成了 CapsLock ⇪。

    而左 Control ⌃ 和其它键一起按时,我则是把它改成了一个新的修饰键——Super Key (⌃⌥⌘),相当于同时按下 Control ⌃ + Option ⌥ + Command ⌘。

    左手小指区还有个容易按到的 Tab ⇥ 键,我们基本都不会去长按它,所以就可以把它和其它键一起按时改键成另外一个新修饰键——Hyper Key (⇧⌃⌥⌘),相当于同时按下 Shift ⇧ + Control ⌃ + Option ⌥ + Command ⌘。

    Super Key (⌃⌥⌘) 和 Hyper Key (⇧⌃⌥⌘) 这两个新的修饰键和其它键组合基本不会和现有快捷键冲突,而且可以很方便地用小拇指一键按到,所以就可以用来定义一些新的快捷键(我主要是用 BetterTouchTool 来设置这些快捷键,Karabiner-Elements 虽然也可以通过写配置文件来实现,但是 BetterTouchTool 有界面可以直接设置会更方便点)。

    Super Key(左 Control ⌃)我主要是用来设置一些和窗口布局相关的快捷键(我用的是一台带鱼屏 + MacBook Pro 屏,所以经常需要对窗口进行排列整理),例如:

    • Super Key + N → 居中窗口
    • Super Key + M → 最大化窗口
    • Super Key + D → 显示桌面
    • Super Key + J / K → 左 ½ 分屏 / 右 ½ 分屏
    • Super Key + U / I / O → 左 ⅓ 分屏 / 中 ⅓ 分屏 / 右 ⅓ 分屏
    • Super Key + ▲ → Mission Control
    • Super Key + ▼ → 应用程序窗口( Application Windows )
    • Super Key + ◀ / ▶ → 把窗口移动到左 / 右显示屏
    • Super Key + 1 / 2 / 3 ... → 程序窗口切换到固定排列布局 1 / 2 / 3 ...(用 Moom 实现,例如固定布局 Safari 在中间、Finder 在左边、编辑器在右边)

    Hyper Key( Tab ⇥)我主要是用来设置一些常用程序的切换快捷键和一些搜索快捷键,例如:

    • Hyper Key + ; → 显示 / 隐藏 Safari
    • Hyper Key + F → 显示 / 隐藏 Finder
    • Hyper Key + I → 显示 / 隐藏 iTunes
    • Hyper Key + S → 显示 / 隐藏 Sublime Text
    • Hyper Key + T → 显示 / 隐藏 iTerm
    • Hyper Key + ' → 显示 / 隐藏 Dash
    • Hyper Key + \ → 显示 / 隐藏 1Password
    • Hyper Key + O → 显示 / 隐藏欧路词典
    • Hyper Key + P → 显示 PopClip
    • Hyper Key + E → 显示 Emoji 选择窗口 😄
    • Hyper Key + G → Google 搜索选中文字
    • Hyper Key + B → 百度搜索选中文字
    • Hyper Key + M → 豆瓣电影搜索选中文字
    • Hyper Key + Y → 欧路词典翻译选中文字

    使用方法

    1. 点此导入 Karabiner-Elements 配置

    2. 启用全部或部分改键规则。

    第 1 条附言  ·  2021-10-26 12:01:05 +08:00
    82 条回复    2024-11-27 03:49:59 +08:00
    Sylv
        1
    Sylv  
    OP
       2019-05-20 09:05:46 +08:00   ❤️ 2
    tinybaby365
        2
    tinybaby365  
       2019-05-20 09:22:40 +08:00
    太复杂了。只用 Emacs key bindings [control+keys]
    Rsl
        3
    Rsl  
       2019-05-20 09:43:26 +08:00
    我是 caps lock 切换输入法. 专门设置两个键分别切换中英这个思路不错, 我也去弄一下.
    justdoit123
        4
    justdoit123  
       2019-05-20 09:46:59 +08:00 via iPhone
    10.14.6 挂了 真是烦人
    devtiange
        5
    devtiange  
       2019-05-20 09:57:26 +08:00   ❤️ 2
    右 shift 平时不怎么用, 用来切换输入法就好了.
    楼主搞那么多钟切换方式, 自己不会乱吗?

    PS: 可以搭配 https://github.com/tekezo/ShowyEdge 中文输入法开启的时候, 在屏幕上显示一条线, 这样能更方便确认当前状态.
    TZ
        6
    TZ  
       2019-05-20 10:26:14 +08:00
    好多热键啊
    Sylv
        7
    Sylv  
    OP
       2019-05-20 10:58:00 +08:00 via iPhone
    @devtiange 实际上我平常只用左右 Command 来切换输入法,已经养成条件反射了,其它快捷键只是最初为了过渡习惯才保留的。
    sunocean
        8
    sunocean  
       2019-05-20 11:52:04 +08:00
    这个思路启发了我, 真的很不错。
    @devtiange 这个软件真的很好用。 发现基本在零设置的情况下。 解决了不知道当前输入法是什么的痛点。 目前使用 caps locks + 这个软件 来实现输入法切换。 省去了适应新快捷键的时间。
    20015jjw
        9
    20015jjw  
       2019-05-20 13:27:55 +08:00
    space cadet 读一下
    sethverlo
        10
    sethverlo  
       2019-05-20 15:22:38 +08:00
    求问楼主,想把 caps 改成 control, 短按 shift 切换中英(自带输入法),长按 shift + 某个键就是大写,这样能改吗……能的话就抛弃搜狗了
    PerFectTime
        11
    PerFectTime  
       2019-05-20 15:54:37 +08:00
    EngelEyes
        12
    EngelEyes  
       2019-05-20 15:54:41 +08:00
    自娱自乐挺好的,有些可能还是要看使用者自己的习惯。
    ooops
        13
    ooops  
       2019-05-20 16:21:34 +08:00
    楼主,右 command 实在有些难按,我想改成别的键,你的配置要怎么修改?
    unco020511
        14
    unco020511  
       2019-05-20 17:22:24 +08:00
    说实话我到现在都没彻底搞清楚 mac 的输入法切换
    Sylv
        15
    Sylv  
    OP
       2019-05-21 06:33:58 +08:00   ❤️ 1
    @sethverlo

    可以实现的,你导入上面的两个配置文件,然后启用这几个改键:
    - Tap Shift_L (⇧) → Switch input source (F18) | 短按左 Shift (⇧) → 切换输入法
    - Tap Shift_R (⇧) → Switch input source (F18) | 短按右 Shift (⇧) → 切换输入法
    - Tap CapsLock (⇪) → Escape (⎋); Hold CapsLock (⇪) → Control (⌃) | 短按 CapsLock (⇪) → Escape (⎋); 长按 CapsLock (⇪) → Control (⌃)

    再按上面说明改下切换输入法快捷键为 F18,这样就能实现你想要的效果,如果你不需要短按 CapsLock (⇪) → Esc (⎋),那可以到下面链接找只改 CapsLock (⇪) → Control (⌃) 的配置:
    https://pqrs.org/osx/karabiner/complex_modifications/#caps_lock
    Sylv
        16
    Sylv  
    OP
       2019-05-21 06:41:21 +08:00
    @ooops

    你倒入我的配置后,修改你的配置文件:
    ~/.config/karabiner/karabiner.json

    查找左右 Command 的键代码 left_command 和 right_command,把它们替换成你想要的键代码就行。

    PS: 右 Command 应该很好按啊,就在空格键旁边,大拇指一移就按到了,你用的不是 Mac 布局的键盘?
    sethverlo
        17
    sethverlo  
       2019-05-21 10:41:36 +08:00
    @Sylv 感谢,让我研究研究…
    szzhiyang
        18
    szzhiyang  
       2019-05-21 10:51:32 +08:00   ❤️ 1
    比 Power Keys 的空格编辑功能差了十万八千里:

    https://PowerKeys.GitHub.io
    ooops
        19
    ooops  
       2019-05-21 10:52:12 +08:00
    @Sylv #16 外接键盘,左边 command 还好,空格较长,右边的 command 感觉多隔了一个键。
    我遇到另外一个问题是我用清歌已经打出了部分字母,然后切换输入法字母没有上屏。这比较尴尬。。还在尝试中。
    liumengdi
        20
    liumengdi  
       2019-05-21 19:04:24 +08:00
    Command ⌘ → 不是把光标移到最右边的快捷键么? 改成切换输入法不会有冲突么
    Sylv
        21
    Sylv  
    OP
       2019-05-22 07:25:44 +08:00
    @ooops 我用搜狗输入法,打中文的时候字母是会上屏的,然后这时切换输入法这些上屏的字母还是会保留。
    Sylv
        22
    Sylv  
    OP
       2019-05-22 07:30:25 +08:00
    @liumengdi 😂
    “短按左 Command ⌘ → 切换到英文输入法”的意思是把单按 Command 键改键成切换英文输入法的快捷键,箭头是表示绑定什么功能的意思,不是指 Command 键 + 右方向键。
    liumengdi
        23
    liumengdi  
       2019-05-22 09:45:00 +08:00
    @Sylv 明白啦, 改成了你的配置, 很方便😁
    tchekai704
        24
    tchekai704  
       2019-05-25 22:58:34 +08:00   ❤️ 1
    楼主思路不错,trying。
    汇报一个 bug,当使用 Microsoft Remote Desktop / Parallels Desktop 等方式访问 Windows 时,shift 会导致无法切换 Windows 下输入法的中英文。需要加入如下配置来排除 shift 的作用范围

    "conditions": [
    {
    "type": "frontmost_application_unless",
    "bundle_identifiers": [
    "^com\\.microsoft\\.rdc\\.macos$",
    "^com\\.parallels\\.winapp"
    ]
    }
    ],
    tchekai704
        25
    tchekai704  
       2019-05-25 23:01:01 +08:00   ❤️ 1
    另外 hyper key 的思路与我不谋而合,我是用 alfred 来设置的,同时我的 hyper key 不是 tab,而是 option。
    理由是 macOS 下的“ option+字母”是输入一些不常用的符号,所以没有任何程序对这个快捷键进行了绑定,不存在任何冲突。
    jijifujiji
        26
    jijifujiji  
       2019-10-18 18:03:19 +08:00
    楼主我想问下 macbook 在系统里面设置快捷键的时候 是怎么把那个设置为 F18 的呀
    我这边只有能按出的键位或者组合键才可以设置
    Sylv
        27
    Sylv  
    OP
       2019-10-18 18:19:59 +08:00 via iPhone
    @jijifujiji 先用 Karabiner 绑定某个键 /组合键为 F18,然后用绑定的键 /组合键在设置快捷键时按下就可以设置成 F18 了。
    jijifujiji
        28
    jijifujiji  
       2019-10-22 23:35:55 +08:00
    @Sylv 谢谢楼主🙏,搞好了
    我还有个问题想问下楼主,就是 我想把切换窗口的 command + tab 替换成 option + tab 应该怎么搞,我照着例子胡乱改了下,不好用,楼主知道正确的应该怎么弄吗
    {
    "description": "Change Alt + tab to Command + tab",
    "manipulators": [
    {
    "from": {
    "simultaneous": [
    {
    "key_code": "left_option"
    },
    {
    "key_code": "tab"
    }
    ],
    "modifiers": {
    // "mandatory": [
    // "command",
    // ],
    "optional": [
    "any"
    ]
    }
    },
    "to": [
    {
    // "key_code": "tab",
    "simultaneous": [
    {
    "key_code": "command"
    },
    {
    "key_code": "tab"
    }
    ],
    // "modifiers": [
    // "command",
    // ]
    }
    ],
    "type": "basic"
    }
    ]
    }
    Sylv
        29
    Sylv  
    OP
       2019-10-23 05:14:47 +08:00
    @jijifujiji

    这样:

    {
    "description": "Change Alt + tab to Command + tab",
    "manipulators": [
    {
    "from": {
    "key_code": "tab",
    "modifiers": {
    "mandatory": [
    "left_option"
    ]
    }
    },
    "to": {
    "key_code": "tab",
    "modifiers": [
    "command"
    ]
    },
    "type": "basic"
    }
    ]
    }
    jijifujiji
        30
    jijifujiji  
       2019-10-23 10:50:12 +08:00
    @jijifujiji
    卧槽,楼主碉堡了!!
    jijifujiji
        31
    jijifujiji  
       2019-10-23 10:50:40 +08:00
    @Sylv
    好用的一批
    Vendettar
        32
    Vendettar  
       2020-02-09 16:57:42 +08:00
    真的🐂🍺
    dofine
        33
    dofine  
       2020-02-16 16:25:06 +08:00
    > 所以就可以用来定义一些新的快捷键(我主要是用 BetterTouchTool 来设置这些快捷键,Karabiner-Elements 虽然也可以通过写配置文件来实现,但是 BetterTouchTool 有界面可以直接设置会更方便点)

    楼主可以介绍下写配置文件咋实现么。。主要是不舍的买 BTT 哈哈哈
    Sylv
        34
    Sylv  
    OP
       2020-02-18 06:02:59 +08:00   ❤️ 1
    @dofine 用 Karabiner-Elements 设置组合键的话还是有点麻烦的,每个组合键都得单独写配置,我很长时间没弄了,记不清怎么写了,你研究参考下 Manual 吧,不过我还是会建议用 BetterTouchTool 等有界面的程序来设置,会简单很多。

    https://pqrs.org/osx/karabiner/document.html
    ruooooooli
        35
    ruooooooli  
       2020-02-23 16:19:50 +08:00
    把窗口移动到左 / 右显示屏

    楼主这个是怎么实现的呢
    Sylv
        36
    Sylv  
    OP
       2020-02-24 01:07:04 +08:00   ❤️ 1
    @ruooooooli 这个我是用 Moom ( https://manytricks.com/moom/) 实现的,有个 Move to Other Display 的功能可以绑定快捷键。
    ruooooooli
        37
    ruooooooli  
       2020-02-24 09:48:21 +08:00
    @Sylv 感谢
    ruooooooli
        38
    ruooooooli  
       2020-02-24 22:45:51 +08:00
    @Sylv 试了一下 moom 和我想要的还是不太一样,可能是我没有表达清楚,我其实想要的是向 Ubuntu 一样,把一个窗口移动到另一个桌面 space 🤣
    Sylv
        39
    Sylv  
    OP
       2020-02-25 01:39:11 +08:00
    @ruooooooli 看了下貌似 Moom 和 BetterTouchTool 都没有把窗口移到另一个 Space 的功能。
    ruooooooli
        40
    ruooooooli  
       2020-02-25 10:47:05 +08:00
    @Sylv 我也发现了,他们都是移动窗口到另一个屏幕上。我目前找到了 sizeup 可以实现这个功能。
    Steven55k
        41
    Steven55k  
       2020-02-29 19:19:25 +08:00 via iPhone
    楼主好,我这边点此导入一直显示 failed to connect the serve,下午尝试自己实现了一部分,核心的输入法部分实在没找到解决方案,希望方便的话能单发一下 json 给我!
    Sylv
        42
    Sylv  
    OP
       2020-03-01 11:50:54 +08:00 via iPhone
    Steven55k
        43
    Steven55k  
       2020-03-02 13:34:30 +08:00
    @Sylv 谢啦!~很完美。你关于 Tab 和 Capslock 的理念也很棒,很顺手
    litianqi1995
        44
    litianqi1995  
       2020-03-10 00:49:40 +08:00
    感谢楼主,推荐 Karabiner 另一个功能 喜欢把外置键盘放到内置键盘上的人 放的不好老会误触,禁用系统键盘了。Karabiner 而且断开置键盘 直接会恢复到自带键盘 非常好用
    dj2rap
        45
    dj2rap  
       2020-03-13 10:14:40 +08:00
    楼主,有没有切换隐藏程序的脚本,上面那个挂了
    Sylv
        46
    Sylv  
    OP
       2020-03-13 11:11:15 +08:00
    @dj2rap 切换程序隐藏是用 BetterTouchTool 来设置的。
    ruooooooli
        47
    ruooooooli  
       2020-04-03 19:34:09 +08:00
    加上 Hyper Key 之后,发现 Tab 用起来好不顺手哈哈哈
    helsinglee
        48
    helsinglee  
       2020-10-10 22:08:04 +08:00
    @Sylv 新版有点兼容性问题!大写切换无法输入
    Sylv
        49
    Sylv  
    OP
       2020-10-11 15:07:55 +08:00
    @helsinglee 你是什么版本?我是 macOS Catalina 10.15.5 + Karabiner-Elements 13.0.0,目前还是正常工作。
    helsinglee
        50
    helsinglee  
       2020-10-18 23:59:54 +08:00
    @Sylv macOS Catalina 10.15.6 + Karabiner-Elements 13.0.0 工作不正常。退回 12.10 ,目前正常使用。
    jijifujiji
        51
    jijifujiji  
       2020-11-02 20:01:53 +08:00
    “TISSelectInputSource API 的问题得到修复(这问题好几年了,我怀疑根本不会修复了?),才能直接用 select_input_source 来实现这种一键切换效果了。”
    这个问题应该就是本来应该出现输入法配置的那块出现...吧,这总是我研究老长时间了,还以为输入法有问题
    sidkang
        52
    sidkang  
       2021-03-24 17:09:47 +08:00
    仍旧 suffer 于 TISSelectInputSource 的 bug,真是无奈= =
    LoneFireBlossom
        53
    LoneFireBlossom  
       2021-10-25 16:28:15 +08:00
    楼主你好,我想导入配置,但 cloudapp 说“The item owner has been notified that their item has exceeded its view limit.”,没法导入= =是不是得重新开放下载啊
    Sylv
        54
    Sylv  
    OP
       2021-10-26 12:03:34 +08:00   ❤️ 1
    @LoneFireBlossom
    已在第 1 条附言里更新了新的导入配置链接,请查看。
    ohmytime
        55
    ohmytime  
       2021-11-20 20:09:35 +08:00
    @ruooooooli 很赞, sizeup 的确能把 窗口移动到另外一个 space.
    Kobayashi
        56
    Kobayashi  
       2021-11-26 20:46:30 +08:00
    Karabiner 切换输入法是有问题

    - select_input_source 基于 TISSelectInputSource, 切换多了会失效。输入法图标变了但是输入法不变。
    - left_shift 直接映射 Ctrl+Space 问题是切换频率过快失效,可能需要多次触发 left_shift 才能切换成功。(没搞明白这是个什么 bug )
    - 映射 left_shift 到 f13-f19 ,然后在系统设置中配置 f13-f19 为输入法切换快捷键。目前看起来没有以上问题
    Anna1879
        57
    Anna1879  
       2021-12-06 04:06:13 +08:00
    非常感谢楼主的维护,很好用。
    使用过程中,由于我日常使用`⌘-L + ␣`调用 Alfred ,所以在 Karabiner-Elements 采用了单键切换输入法设置之后,会产生两个效果:
    1. 当前输入法为中文时,启动 Alfred 默认输入法改为英文;
    2. 当前输入法为英文时,启动 Alfred 默认输入法改为中文;

    这就导致无法统一 Alfred 调取的输入法,对 workflow 调用极为不利,还自我增加了一个在 Alfred 搜索中需判断输入法的步骤。

    此时,使用 Keyboard Maestro ,设置按下`⌘␣`自动将输入法改为英文即可解决上述问题。
    Sylv
        58
    Sylv  
    OP
       2021-12-06 04:44:58 +08:00
    @Anna1879
    Alfred 其实自带有自动切换到特定输入法的功能:
    设置中 Advanced - Force Keyboard
    Anna1879
        59
    Anna1879  
       2021-12-06 11:33:29 +08:00
    @Sylv 谢谢提醒:),那这个解决方案堪称完美了。
    LoneFireBlossom
        60
    LoneFireBlossom  
       2021-12-09 16:36:12 +08:00
    @LoneFireBlossom #53
    其实我一直都是需要输入中英日三种语言,所以就没用楼主的方法,导入楼主的方法放在 karabiner-elements 里留着传家(

    所以我就老老实实用 Keyboard Maestro 来设置,用左右 CMD 、OPT 键来切换语言。

    > 经常会切换到中文输入法后,菜单栏的输入法图标已经变为中文了,但是打出来的字却还是英文。( Keyboard Maestro 等使用相同 API 来切换输入法的工具都有这个问题。)

    针对这个问题,其实我觉得这个 BUG 的频率我还能接受。10 次切换有一次会出现吧差不多?
    出现问题的时候我就快速按三下切换语言,我是把系统的那个在各个输入法间切换的快捷键设置成了左 OPT (忘了左 OPT 映射成 F 十几了),因为有三个输入法,所以按三下切换键就从中文再次切换到中文,这样的切换是正常的。
    LoneFireBlossom
        61
    LoneFireBlossom  
       2022-01-20 21:29:45 +08:00   ❤️ 2
    楼主只用两种输入法,但我用三种,所以在这儿补充一下现在我的使用方法。

    环境:MBP16 intel Monterey 12.1 、12.2 beta

    这七八天来我用的是 kawa ( https://github.com/hatashiro/kawa )来切换输入法。感觉比用 keyboard maestro 来设置要好。
    用 keyboard maestro 切换的问题就是楼主说过的,按下快捷键切换中文,系统显示输入法是中文,结果实际上还是英文。

    用 kawa 的话没有这个问题,它的问题是我按下切换到中文 /日语输入法的快捷键之后,不能瞬间开始打字,得稍微缓个 0.1 秒左右(总之就是别太快就行)。这个问题比用 keyboard maestro 来切换输入法的问题要轻太多了,所以我的输入体验提升了很多。
    别的就没任何问题了。

    注意:
    用 kawa 需要阅读其旧版项目中的 readme ,新版里不知为何删掉了这段,见: https://github.com/zcbenz/kawa
    摘抄如下,我刚开始没设置这个,结果体验和 keyboard maestro 的方法一样。设置之后就没有 keyboard maestro 的问题了。

    # For CJKV input sources

    There is a known bug in the TIS library of macOS that switching keyboard layouts doesn't work well when done programmatically, especially between complex input sources like CJKV.

    Kawa workarounded this bug by programmatically doing the followings:

    Select a target input source
    If the source is CJKV
    Switch to the first non-CJKV input source
    Return to the target input source by sending Select the previous input source shortcut
    Thus, to activate the workaround above, the following restrictions should meet.

    There is at least one non-CJKV input source in the input source list
    The Select the previous input source shortcut should be enabled and set to something
    It can be set in System Preferences > Keyboard > Shortcuts > Input Sources
    CZCaptain
        62
    CZCaptain  
       2022-06-23 13:26:57 +08:00
    哈喽楼主好
    目前我的方案是这样:
    短按 caps→esc
    长按 caps→command
    可不可以将你提到的短按左 command 切换至英文输入法这个配置融合到短按 caps→esc 这里面去,这样在全局环境下,只要按下 caps ( esc ),就能退出插入模式,并且自动切换输入法为英文?

    这是我目前的 karabiner caps 键配置,不知道可不可改
    {
    "description": "Change caps_lock to Command if pressed with other keys, to escape if pressed alone.",
    "manipulators": [
    {
    "from": {
    "key_code": "caps_lock",
    "modifiers": {
    "optional": [
    "any"
    ]
    }
    },
    "to": [
    {
    "key_code": "left_command"
    }
    ],
    "to_if_alone": [
    {
    "key_code": "escape"
    }
    ],
    "type": "basic"
    }
    ]
    },
    Sylv
        63
    Sylv  
    OP
       2022-06-28 06:16:28 +08:00
    @CZCaptain 你好,我很久没折腾过 Karabiner 配置了,已经生疏了,所以我也不太清楚你的需求能不能用 Karabiner 实现,抱歉。
    helsinglee
        64
    helsinglee  
       2022-10-24 10:54:09 +08:00
    @CZCaptain 也许不行,发现改建后的修饰键有点问题。
    bnpysse
        65
    bnpysse  
       2023-05-05 14:40:48 +08:00
    我用清歌五笔输入法,好像不起作用呢。

    另外,我使用了 Manico ,是不是与使用它有关系?因为使用了 Manico ,从而造成了 Karabiner 不起作用?
    bnpysse
        66
    bnpysse  
       2023-05-06 08:20:14 +08:00
    找到原因了,我需要在 Karabiner 当中把 Left-Shift 以及 Right-Shift 映射成 F18 才可以。

    我还是想保留长按 Shift+字母的大写功能,这个对我来说,我还是觉得很用的。

    其它的都好,就是想保留一下 Shift 的长按功能,怎么改呢?有了解的朋友么?谢谢!
    capgrey
        67
    capgrey  
       2023-07-25 23:14:27 +08:00
    感谢楼楼主!
    LoneFireBlossom
        68
    LoneFireBlossom  
       2023-09-19 00:02:40 +08:00   ❤️ 2
    @LoneFireBlossom
    现在已经不需要使用 kawa 了。
    使用新版 input source pro ,设置切换输入法的快捷键,并打开故障排除-修复输入法切换问题。就没有 CJKV 语言的问题了
    LoneFireBlossom
        69
    LoneFireBlossom  
       2023-10-10 17:44:38 +08:00
    @LoneFireBlossom 不过目前试了试还是不如 kawa 好用,有的时候还是会出现显示切换到中文但是实际上还是英文的问题,等再更新吧
    Polygene
        70
    Polygene  
       302 天前
    蹲一个 Win 平台左右 Alt 键切换中英文的方案,这个方案我在 macos 上试用之后感觉确实很好用,输入效率提高好多。
    zmxnv123
        71
    zmxnv123  
       265 天前
    如果使用三种输入法,中日英三语,只使用 f18 的话只能在两种输入法之间切换,所以有什么办法使用 TISSelectInputSource API 吗。
    zmxnv123
        72
    zmxnv123  
       265 天前
    @Polygene autohotkey 可以实现
    zmxnv123
        73
    zmxnv123  
       265 天前
    @LoneFireBlossom 老哥, 故障排除-修复输入法切换问题 在哪里打开?我也是中日英三种输入法切换。
    LoneFireBlossom
        74
    LoneFireBlossom  
       265 天前
    @zmxnv123 #73 我上面写了啊,还是得用 kawa
    zmxnv123
        75
    zmxnv123  
       265 天前
    @LoneFireBlossom 看了下 kawa ,原来是用了 option+control+space 快捷键。我直接绑到 karabiner 上去了,没有用 kawa ,目前使用没啥问题。https://gist.github.com/nzooherd/9e83731c70ba68f87d8c58f267ccae19
    LoneFireBlossom
        76
    LoneFireBlossom  
       265 天前
    @zmxnv123 #75 根本不是 kawa 用什么快捷键的问题……是 kawa 会通过「在切换到中文输入法时先切换到英文输入法再切换到中文输入法」来解决了这个 BUG
    zmxnv123
        77
    zmxnv123  
       265 天前
    @LoneFireBlossom 不管怎么说,我看你那个链接知道了 option+control+space 这个快捷键,绑在 karabiner 上也能用,目前没啥问题。
    imkerberos
        78
    imkerberos  
       13 天前   ❤️ 1
    @devtiange 受你的推荐的软件启发,用 hammerspoon 和 limelight 实现了根据输入法状态变化 limelight 的颜色,现在真是舒服啊!

    [收藏的 limelight 源代码]( https://github.com/imkerberos/limelight)
    ```lua
    local hs = hs
    hs.keycodes.inputSourceChanged(function ()
    if hs.keycodes.currentSourceID() == "com.apple.keylayout.US"
    or hs.keycodes.currentSourceID() == "com.apple.keylayout.ABC" then
    print("==== change to US ====")
    hs.execute("/nix/store/ahqry8gchidl4mpag5j7lzp8a0md7cq7-limelight-0.1.0/bin/limelight -m config active_color 0xFF7F9200")
    else
    print("==== change to CJK ====")
    hs.execute("/nix/store/ahqry8gchidl4mpag5j7lzp8a0md7cq7-limelight-0.1.0/bin/limelight -m config active_color 0xFFFF2F92")
    end
    end)
    ```
    imkerberos
        79
    imkerberos  
       13 天前
    phoulx
        80
    phoulx  
       7 天前   ❤️ 1
    @LoneFireBlossom #76 参考你引述的 kawa 的方法,karabiner 也可以配置多输入法下指定切换,因为`to/to_if_alone`对应的 value 是一个列表,会顺序执行列表中的动作。所以先切换到指定输入法、再连按两次「选择上一个输入法」的快捷键(这里映射为 F13 )即可:
    ```json
    "to_if_alone": [
    {
    "select_input_source": {
    "language": "^zh-Hans$",
    "input_source_id": "^im\\.rime\\.inputmethod\\.Squirrel\\.Hans$",
    "input_mode_id": "^im\\.rime\\.inputmethod\\.Squirrel\\.Hans$"
    }
    },
    {
    "key_code": "f13"
    },
    {
    "key_code": "f13"
    }
    ]
    ```
    实测延迟足够低(体感不足 0.1 秒),不用刻意等待再输入,唯一的影响是右上输入法图标会轻闪一下,因为相当于快速切换了两次
    LoneFireBlossom
        81
    LoneFireBlossom  
       7 天前
    @phoulx #80 用 rime 没这个 bug 吧?应该是只有 Mac 自带的输入法才有这个 bug
    phoulx
        82
    phoulx  
       6 天前 via iPhone
    @LoneFireBlossom 用 rime 也会遇到这个 bug ,估计只要属于 zh*都有
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1224 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:10 · PVG 02:10 · LAX 10:10 · JFK 13:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.