在 macOS 系统上,Control 键在保证原有功能不受影响前提下,同时实现 Caps Lock 原有短按切换中英文、长按锁定大小写功能。

前言

最近入手了一把 Keychron Q60Max 键盘,HHKB 配列,也在过渡熟悉键位过程中。对比其他配列键盘,Caps Lock 位置替换为了 Control 键,不得不说一些操作变的非常顺手,在 macOS 上配合 Emacs 的快捷键,可以做到系统全局中能够输入文字的地方都能方便的进行光标移动,基本可以做到在码字的时候双手不离开键盘。但就是这样的改动带来了一连串的连锁反应:

问题 1:

由于 Caps Lock 键的缺失,之前在 macOS 上非常顺手的短按切换中英文的方式,将不得不变成 Control + Space 组合键的方式。不是我不能自适应组合键切换中英文,而是用过 macOS 的就知道,由于这个组合键系统还兼容了短按和长按功能,所以这个组合键切换输入法其实并不是很流畅,短按有时会失败。因此我迫切希望依旧用单按键来实现中英文切换。我的替换方式是将每个中文输入法中的中英文切换快捷键设置成 Control 键,这样就实现了不切换输入法,而只在当前输入法中切换中英文。

问题 2:

这种方式在码字的时候问题不大,但是在使用 Nvim 的时候,又出现了 bug。为了减少在 nvim 中切换 Normal / Insert / Command 等模式时需要手动调整中英文,我下载了 im-select 插件,但在使用该插件时,却又出现了新的 bug,即在切换回 Insert 模式时,无法正常的切换出中文来。详细情况参见:https://github.com/keaising/im-select.nvim/issues/27。因此我就把进入 Insert 模式切换回原输入法功能关闭了。这就导致回去输入中文的时候,必须从 ABC 状态下按 Control + Space 组合键呼出中文。还是让中英文切换需要按组合键才行。

在 ZF 闲逛的时候,发现了这篇帖子 60% 配列最完美的键位方案(对于 VIM 爱好者),对我启发甚大,虽然我的需求不同于楼主的 esc 和切层,而是尽量保证原 HHKB 键位不变动的情况下,同时用一个非常顺手的单键位实现中英文切换。因此,接下来我将介绍一下我的解决办法。


适用于
  • macOS 系统
  • HHKB 配列键盘,支持 VIA 改键
  • 保证原键位功能不变,即 Control 功能不影响,还要做到 Caps Lock 原有短按切换中英文、长按锁定大小写功能。

解决方案

VIA 修改键位

其实,很简单,原理就是利用 VIA 的 Any 键功能,实现一个键位上绑定短按 Caps Lock,长按 Control 功能。这样可行的原因是 Control 按键本身就是用于组合键,而一般情况下都是按键时长超过 200ms 的,完全可以只在长按时触发 Control 键的。

具体 VIA 改键步骤:连接上键盘后,选中该键位,点击 SPECIAL -> 点击 Any -> 在弹出框中输入 MT(MOD_LCTL, KC_CAPS) -> 保存即可。

设置Control组合键

启用 Caps Lock 切换中英文

系统中在输入法设置中启用 Caps Lock 切换中英文,如下图所示。

启用 Caps Lock 切换中英文

写在最后

以上两步设置完,可以愉快地实现 HHKB 中的 Control 键位和 macOS 中的 Caps Lock 短按切换中英文、长按锁定大小写功能的完美融合,并且键位和之前的习惯完全相同,没有任何负担,并且规避了一些系统级切换输入法的隐藏 bug。

另外,需要提到一点,我在测试 Keychron Q60Max 的时候,Cable 有线连接存在 bug,短按该键位,系统识别到的是长按 Caps Lock,即短按也变成了锁定大小写。而 2.4G 和蓝牙模式是正常触发 Caps Lock 短按切换中英文效果的。不知道是固件 bug 还是系统 bug,就先这样吧,反正我平时除了充电,基本都是无线连接。

补充 HHKB 配列方向键设置

受评论区小伙伴@northyear的启发,将右下角四个键也利用相同思路设置成短按方向键、长按功能键的设置,具体设置如下:

  • 上:MT(MOD_RSFT, KC_UP)
  • 下:MT(MOD_RALT, KC_DOWN)
  • 左:MT(MOD_RGUI, KC_LEFT)
  • 右:LT(2, KC_RGHT)

image.png