Boji / 77liu.top
← 返回时间线

更新于 2026/11/01 00:55 / 使用经验

Mac 换用搜狗后:恢复中英切换和数字标点习惯

主人编辑 ↗

短按中/英键却开启大写,输入 2.2 却变成 2。2。用 Karabiner + F18 与搜狗标点设置,找回熟悉的输入习惯。

TL;DR:Mac自带中文输入法似乎记不住我的常用词表,此前有搜狗输入法积累的2.2万个人词表和词库;

然而,换用搜狗后,中/英切换键的逻辑变了,输入数字后智能英文标点功能也掉了,重新适应的切换成本大,闹心。

本文分享用 Karabiner 和搜狗设置方式解决该问题。

Mac 自带输入法似乎记不住我的用词习惯,候选词排序经常影响中文输入准确性和工作效率,甚至让我怀疑它在故意扰乱词序,降低我的工作效率。搜狗支持个人词库和主题词库,我已有约 2.2 万条个人词汇,因此决定换用搜狗。

问题

官网安装完搜狗输入法后,遇到两个与 macOS 系统输入法行为不一致的体验,亟需解决:

问题 实际表现 期望行为
1. 中英文切换逻辑改变 短按“中/英”直接亮绿灯,进入英文大写 保持原有逻辑:短按切换中英文,长按开启大写,再按解除
2. 数字后标点不符合习惯 中文状态下输入 2.2,得到 2。2 保持习惯:输入一个数字后,下一标点使用英文标点

Note

最初的问题是短按直接触发大写。后文的切换漏响应,发生在 Karabiner 调试阶段。

环境

2026.10.31

项目 版本或配置
macOS 26.6.2,构建号 25G83
搜狗输入法 Mac 版 6.25.3.12004
Karabiner-Elements 16.3.0,排查时安装
键盘 Mac 内置键盘,“中/英”键对应 Caps Lock
输入法 ABC、系统简体拼音、搜狗拼音

解决方案

1. 中英切换:Karabiner + F18

解决逻辑

由 Karabiner 统一处理“中/英”键:短按发送输入法切换快捷键,长按发送 Caps Lock。同时关闭搜狗和 macOS 原有的中/英键切换绑定。

最终使用 F18 作为切换快捷键。调试时使用 Control+空格仍有漏响应,改为 F18 后恢复正常。

Karabiner 功能简介

Karabiner-Elements 是 macOS 键盘映射工具,可以把一个按键映射为另一个按键或组合键,也能分别设置短按、长按等行为。本次用它保留同一个“中/英”键的两种用途:切换输入法和开启大写。

Karabiner 安装

从 Karabiner 官网下载安装包。本次使用 16.3.0,安装和授权步骤参考官方安装说明。

  1. 打开下载的 .dmg,运行其中的 Karabiner-Elements.pkg,按安装向导完成安装。
  2. 打开 Karabiner-Elements,按首页提示进入系统设置,允许后台服务运行,包括需要管理员权限和不需要管理员权限的服务。
  3. 在 系统设置 → 隐私与安全性 → 辅助功能 中,开启 Karabiner 提示的对应项目。再检查 输入监控;通常辅助功能授权会同时覆盖输入监控,若仍有提示,按提示补齐。
  4. 按 Karabiner 提示,允许虚拟键盘/鼠标驱动扩展。新版 macOS 可在 系统设置 → 通用 → 登录项与扩展 → 驱动程序扩展 中检查。
  5. 遇到系统验证弹窗,在本机使用 Touch ID 或管理员密码确认。
  6. 回到 Karabiner,确认不再提示缺少权限,并选择与实际键盘一致的虚拟键盘类型;本机使用 ANSI。

Important

这些授权用于读取和改写键盘输入、运行后台服务及创建虚拟键盘。仅安装软件还不够,完成授权后规则才能工作。

按键配置

  1. 搜狗 → 按键 → 中英文:禁用快捷键。
  2. macOS → 键盘 → 文字输入 → 编辑:关闭“使用中/英键切换 ABC 输入法”。
  3. macOS → 键盘 → 键盘快捷键 → 输入法:将“选择上一个输入法”改为 F18。
  4. Karabiner:短按发送 F18,长按发送 Caps Lock,已开启大写时再按解除。

Tip

日常仍按原来的“中/英”键,不需要实体 F18 键。启用文末规则后,在系统快捷键录入框中短按“中/英”,即可发送 F18。

Note

“选择上一个输入法”切换的是最近使用的两个输入源,并未固定绑定搜狗与 ABC。先分别选用这两个输入源,再测试切换。

flowchart TD
    I([输入:按下中/英键]) --> K[已配置:Karabiner 接管]
    K --> C{大写是否已开启?}
    C -->|是| U[发送 Caps Lock:解除大写]
    C -->|否| T{按键行为}
    T -->|短按松开或紧接着打字| F[发送 F18]
    T -->|按住达到 300 ms| L[发送 Caps Lock,保持至少 500 ms]
    F --> S[macOS:选择上一个输入法]
    S --> O([输出:切换中英文])
    L --> A[输出:开启大写]
    X[约束:关闭搜狗及系统原生 Caps 切换绑定] -.-> K

规则有两个时间参数:

  • 300 ms:区分短按和长按。短按在松开时执行,不必等满 300 ms;按键尚未松开就开始打字时,补发切换,并避免重复触发。写法参考官方连打处理示例。
  • 500 ms:长按触发后,发送给系统的 Caps Lock 事件至少保持这个时长。本机用 200 ms 且设置 repeat: false 时无效,改为 500 ms 并移除该项后正常。

最终规则见文末。

2. 数字后自动英文标点:搜狗内配置

搜狗 → 常用 → 符号设置:开启“智能调整数字后标点”。

Important

开启的是“智能调整数字后标点”,不是“中文下使用英文标点”。中文句子仍保留中文标点。

通过设置界面重新开启后,数字后的英文标点恢复正常。

Note

本次直接修改配置文件后曾复发,检查时发现该选项已恢复为关闭。最终通过搜狗设置界面重新保存;界面操作还会更新“手动修改设置时间”。优先使用界面设置,不把直接改文件作为最终方案。

偏好设置打不开时

本次遇到设置进程仍在运行、窗口却不出现的情况。结束设置进程后,从菜单栏搜狗输入法菜单重新打开“偏好设置”,窗口恢复正常,无需重启电脑。

  1. 在“活动监视器”中搜索 SogouPreference 并退出该进程,也可在终端执行:

    bash
    killall SogouPreference
    
  2. 从菜单栏搜狗输入法菜单点击“偏好设置”。

  3. 进入“常用”,重新保存“智能调整数字后标点”,在中文状态下测试 2.2。

本次直接启动应用包曾出现无窗口进程,因此重新打开时使用搜狗菜单入口。

排查过程与失败路径

最初故障可以稳定复现:使用搜狗时,短按“中/英”直接亮绿灯;切回系统拼音正常,换其他应用使用搜狗也一样。后续调整中还出现过“灯亮,但输入小写”。

第一阶段:排查原始故障

  1. 关闭再开启 macOS 中/英切换选项:无效。
  2. 将搜狗内部切换键设为 Caps Lock:无效,后续还出现指示灯与输入大小写不一致。
  3. 重启搜狗进程:暂时恢复,随后复发。
  4. 禁用搜狗内部 Caps Lock 绑定,再重启:仍复发,单独撤销绑定没有解决问题。

第二阶段:调试 Karabiner

  1. 短按发送 Control+空格,长按发送 Caps Lock:短按基本可用,长按无效。
  2. 将长按输出改为保持 500 ms,并移除 repeat: false:长按恢复正常。
  3. 增加快速连打处理,继续发送 Control+空格:仍有切换漏响应。
  4. 系统快捷键和规则输出同步改为 F18:切换恢复正常。

连续按键漏响应发生在 Karabiner 调试后期。当时多次按键后的状态是:

text
拼 → 拼 → 拼 → 拼 → A → A → 拼 → 拼 → A

它表示部分按键没有触发切换,输入法保持原状态;并非最初的“短按直接大写”,也不是输入法轮转顺序错误。补上连打处理仍无效,最后从 Control+空格改为 F18 后恢复正常。

Note

日志未定位到原始故障的根因。搜狗历史更新记录曾提及 Caps Lock 相关修复,但不能据此认定是同一个问题。

第三阶段:数字标点复发与重新保存

  1. 直接将 keySmartChangePunctuation 改为 "1",重启输入法主进程:之后仍出现 2。2,配置中该项已回到 "0"。
  2. 检查旧配置与进程:21:58 写入的配置同时恢复了另一项旧设置;后台服务仍从安装时持续运行。存在旧配置被写回的可能,尚未确定具体来源。
  3. 重启搜狗相关进程:数字标点保持开启,但偏好设置仍无窗口。
  4. 结束设置进程,从搜狗菜单重新打开:窗口恢复正常。通过界面重新保存数字标点选项,实际输入恢复正常。

Note

目前没有证据证明搜狗会强制关闭该功能,也尚未证实是后台缓存或云同步覆盖。此次已通过界面保存,长期是否复发仍需观察。

附:最终 Karabiner 规则

将下面的 JSON 保存到 ~/.config/karabiner/assets/complex_modifications/,在 Complex Modifications 中添加并启用。前提是系统“选择上一个输入法”已绑定 F18。

json
{
  "title": "中英键短按切换与长按大写",
  "rules": [
    {
      "description": "短按 F18 切换输入法,长按大写,再按解除",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "caps_lock",
            "modifiers": { "mandatory": ["caps_lock"] }
          },
          "to": [
            {
              "key_code": "caps_lock",
              "modifiers": ["caps_lock"],
              "hold_down_milliseconds": 200,
              "repeat": false
            }
          ]
        },
        {
          "type": "basic",
          "from": { "key_code": "caps_lock" },
          "to_if_alone": [
            { "key_code": "f18", "halt": true }
          ],
          "to_if_held_down": [
            { "key_code": "caps_lock", "hold_down_milliseconds": 500 }
          ],
          "to_delayed_action": {
            "to_if_canceled": [{ "key_code": "f18" }]
          },
          "parameters": {
            "basic.to_if_alone_timeout_milliseconds": 300,
            "basic.to_if_held_down_threshold_milliseconds": 300,
            "basic.to_delayed_action_delay_milliseconds": 300
          }
        }
      ]
    }
  ]
}
— 完 —
← 回到时间线