autocomplete-plus 默认不响应空格键,问题通常源于 provider(如 autocomplete-snippets)劫持、Show Suggestions On Keystroke 开关开启、语法作用域错误或 keymap 冲突,需逐项排查并重启 Atom。

autocomplete-plus 默认不响应空格键,但 provider 可能劫持
Atom 的 autocomplete-plus 本身对空格键( )完全无监听——它默认只响应字母、数字、点号(.)、下划线等符号输入。如果你按空格后意外弹出补全列表,问题一定出在某个语言 provider 或 snippet 插件上,比如 autocomplete-snippets 或旧版 autocomplete-atom-api,它们会把空格当作“单词边界”触发模糊匹配。
- 打开
Settings → Packages,搜索autocomplete-snippets,进其 Settings,关闭Use Snippets As Suggestions - 检查是否装了
autocomplete-atom-api(已废弃):如有,直接禁用或卸载;它会全局监听空格并返回 Atom 内置 API 名 - 运行
Ctrl+.(Windows/Linux)或Cmd+.(macOS)打开 Keybinding Resolver,按空格键看实际触发了哪条命令——若显示来自某个 provider 的getSuggestions,就定位到那个包
为什么关掉 “Show Suggestions On Keystroke” 才真正有效
很多人只关 provider,却忘了 autocomplete-plus 自身有个开关叫 Show Suggestions On Keystroke。它一旦开启,就会对所有非控制字符(包括空格)尝试调用当前激活的 provider。哪怕 provider 本不该响应空格,这个开关也会强制转发请求,导致空列表或卡顿。
- 进入
Settings → Packages → autocomplete-plus → Settings - 务必关闭
Show Suggestions On Keystroke(灰色开关) - 保留
Enable Auto Completion开启——它只控制插件是否加载,不影响手动触发(Ctrl+Space仍可用) - 重启 Atom:这个设置修改后必须完全退出再启动,否则缓存可能让空格继续触发
空格被误判为“单词完成符”的典型场景
某些 provider(如 autocomplete-python 配合旧版 jedi)会把空格当作“结束当前 token”,进而触发一次建议查询,尤其在字符串末尾、注释后或正则表达式中。这不是 bug,是 provider 把空格纳入了 tokenization 规则。
- 临时验证:在 JS 文件里输
console.l后按空格,看是否弹窗——如果弹,说明autocomplete-javascript或atom-ternjs正在响应 - 根治方法:进对应 provider 设置页,找
fuzzy、triggerOnSpace或includeCompletionsFromAllBuffers类选项,全部设为false - 更安全做法:在
~/.atom/keymap.cson中加屏蔽规则:'atom-text-editor:not([mini])': 'space': 'unset!'
(注意:仅当确认空格真没其他用途时才用)
别忽略语法作用域和文件识别的影响
空格触发补全往往只发生在特定 grammar 下,比如你在一个被识别为 source.python 的缓冲区里按空格,而 autocomplete-python 恰好对该 scope 声明了空格响应;但同一文件若被错标为 text.plain,就不会触发。右下角语法名不对,所有配置都白搭。
- 新建未保存文件默认是
Plain Text,必须先保存为.py或.js,或手动点右下角切换语法 - 检查当前 scope:按
Ctrl+Shift+P→ 输入Editor: Log Cursor Scope,看输出是否含source.python或string.quoted.double.js等 - 若 scope 显示异常(如
text.html meta.tag.inline.any.html却在写 JS),说明 HTML provider 过度活跃,应去autocomplete-html设置里关掉Enable Auto Completion

















