问题

macOS 上用中文输入法(系统双拼、搜狗等),tmux 里按 prefix(C-b)之后的单字符命令 —— c 新建窗口、x 杀 pane —— 会被输入法吞掉当拼音,tmux 命令不触发。

取舍

只切去,不切回

菜单/命令结束后输入法仍是 ABC,回到 shell 继续打中文需要手动 Ctrl+Space 切回。

想要自动恢复需要先存当前 IME、在每个绑定结束时切回 —— tmux 没有"退出 prefix 表"的 hook,实现起来较繁琐,简单方案够用。

配置

set -g prefix None
unbind C-b
bind-key -n C-b run-shell -b "macism com.apple.keylayout.ABC" \; switch-client -T prefix

macism 是一个 macOS 下的命令行输入法切换工具,通过 TIS API 读取/设置当前输入源,几毫秒完成切换。安装:

brew install laishulu/homebrew/macism

验证可用:

macism                               # 打印当前输入法 ID
macism com.apple.keylayout.ABC       # 切到英文

常见 ID:

  • 英文:com.apple.keylayout.ABC
  • 系统双拼:com.apple.inputmethod.SCIM.Shuangpin
  • 系统拼音:com.apple.inputmethod.SCIM.ITABC

重载 tmux 配置:

tmux source ~/.config/tmux/tmux.conf

方案说明

思路是按 prefix 的瞬间先切 ABC,后续 prefix 表里的键就都能正常到达 tmux。

三行配置的作用:

  1. set -g prefix None —— 禁用默认 prefix。只要 C-b 还是 prefix 键,tmux 会先走 prefix 逻辑,根表上的 -n C-b 绑定不会触发。必须先禁掉默认 prefix,根表绑定才能拿到按键。
  2. unbind C-b —— 清掉 root 表上 C-b 的任何旧绑定。
  3. bind-key -n C-b ... —— 根表绑定 C-b:先异步调 macism 切 ABC(-b 不阻塞后续命令),再 switch-client -T prefix 手动跳进 prefix 键表。后续 c/x/Space 等照旧。