mac terminal 的自动纠错源于系统输入法而非 zsh;需关闭三层:系统自动拼写纠正、中文输入法英文纠错、全局联想与智能标点,并可执行 defaults 命令禁用底层拼写服务。
mac 上 zsh 本身不提供拼写纠错功能,你遇到的“自动纠错”行为(比如打 teh 变成 the、ios 被转成 ios、中英文混输时拼音被强转)不是 zsh 或终端 shell 的功能,而是 macos 系统级文本服务 + 中文输入法模块 在后台干预了你的键盘输入——哪怕你在 terminal 里敲命令,只要用的是系统自带输入法(如简体拼音),这些机制就依然生效。
要真正让 Terminal(以及所有应用)停止偷偷改你打的字,得关三层:
关掉系统级自动拼写纠正
这是最基础的一层,影响所有原生应用和 Terminal 输入:
- 打开「系统设置」→「键盘」→「文本输入」
- 点击右下角「编辑」按钮
- 选中当前输入法(如“简体拼音”)→ 点击「详细信息」
- 取消勾选【自动更正拼写】
✅ 这步关闭后,“teh”不会自动变“the”,但红色波浪线可能还在(见下条)
关闭中文输入法的英文纠错与补全
简体拼音等输入法自带独立的英文词库逻辑,会监听英文单词并擅自修正大小写或补全:
- 点击菜单栏输入法图标(如“简体拼音”)→「偏好设置…」
- 切换到「英文」选项卡
- 关闭【英文单词自动补全】和【英文拼写纠错】
⚠️ 不关这层,你在 Terminal 里敲
ReactComponent可能被悄悄改成reactcomponent,尤其影响代码输入
停用全局联想与智能标点干扰
这些功能不纠错,但会“预测替换”,导致空格后自动上屏第一个候选词、直引号变弯引号、双破折号变长破折号:
- 回到「系统设置」→「键盘」→「文本输入」→「编辑」
- 取消勾选【在键入时显示替代单词】
- 进入「键盘」→「听写」→ 把听写开关设为「关闭」(否则拼写引擎强制唤醒)
- 进入「键盘」→「输入源」→ 当前中文输入法 →「…更多选项」→「标点符号」→ 关闭所有智能标点选项
(可选)终端命令强制禁用底层拼写服务
如果上述操作后 Terminal 仍有异常替换(比如 Spotlight 或 Siri 残留逻辑触发),执行:
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false killall NSUserNotificationCenter
然后重启 Terminal。
? 提示:不需要动
~/.zshrc,也不需要禁用 Oh My Zsh 的更新提示(那是另一回事)。zsh 没有拼写纠错,别往 shell 配置里找。
这样设置完,Terminal 打字就真·所见即所得了:URL 保持大写,zhongguo 不跳成“中国”,git commit -m "fix teh bug" 里的 teh 也原样保留。











