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