ctrl+space没反应主因是系统或输入法劫持:windows被中文输入法切换占用,macos被spotlight或输入源快捷键占用;需先禁用系统冲突快捷键,再确保sublime中语法设为python等具体类型、“auto_complete”: true启用、lsp服务器激活。

Ctrl+Space没反应?先看按键进没进Sublime
很多用户以为是自动补全插件(如AutoFileName、Emmet、SublimeCodeIntel)坏了,其实Ctrl+Space在 Windows/macOS 上常年被输入法或系统劫持。按Ctrl+`打开控制台,输sublime.log_input(True)回车,再按Ctrl+Space——如果控制台完全没输出,说明信号压根没到 Sublime。
常见拦截点:
- Windows:搜狗/QQ 拼音默认用
Ctrl+Space切换中英文,切到英文输入法再试 - macOS:系统设置 → 键盘 → 快捷键 → 输入源里是否启用了
Cmd+Space或Ctrl+Space - 某些键盘驱动(如 Logitech Options、Razer Synapse)也会全局占用该组合
Emmet 和 AutoFileName 都抢 Tab 键?查 context 条件
Tab键冲突最典型:Emmet 默认在 HTML/CSS 文件中展开缩写,AutoFileName 在路径输入框里补全文件名,但两者都靠"context"判断是否生效。如果你在普通 JS 文件里按Tab没反应,不是插件失效,而是 context 不匹配。
排查方式:
- 打开
Preferences → Key Bindings,右侧User文件里检查是否手动加了无条件的{"keys": ["tab"], "command": "emmet_expand_abbreviation"}——这会强行覆盖所有场景 - Emmet 的正确绑定在
Packages/Emmet/Default.sublime-keymap里,带"context"字段,例如只在"selector": "source.css, text.html.basic"下生效 - AutoFileName 的 Tab 行为只在
string.quoted.double等字符串内触发,不满足条件时它根本不会响应
User.sublime-keymap 写错 JSON 就等于没写
想禁用 Emmet 的 Tab 行为,很多人直接在User.sublime-keymap里加一条空命令,结果没用。这不是逻辑问题,是格式错了导致整份配置静默失效。
必须遵守的硬规则:
- 所有键名和字符串值必须用英文双引号:
"keys"不是keys,"emmet_expand_abbreviation"不是emmet_expand_abbreviation - 数组结尾不能多逗号:
["tab"],是错的,["tab"]才对 - 不支持
//注释;要临时禁用某条,删整行,或改成"command": "not_a_real_command" - 保存后立即生效,但得确保没有其他插件(比如 Vintage)在更靠后的位置又绑了一次
Tab
Esc 关不掉自动补全弹窗?这不是快捷键问题
Esc关补全列表(如 AutoComplete、SublimeCodeIntel 弹出的下拉框)是 Sublime 内核行为,不走任何.sublime-keymap流程。你在User里加{"keys": ["escape"], "command": "hide_auto_complete"}不仅无效,还可能破坏原生逻辑——比如按Esc后弹窗还在,光标也卡住。
如果Esc失灵,优先排查:
- 是否启用了
Vintage插件:它把Esc用于退出插入模式,会干扰补全关闭。进Preferences → Package Settings → Vintage → Settings,设"exit_insert_mode_on_escape": false - 是否开了
Origami:它的close_on_escape选项可能劫持Esc,需在插件设置里关掉 - 运行
subl --safe-mode测试:若此时Esc恢复,基本锁定是插件干扰,而非快捷键配置本身











