atom自动补全失效的根源是链条断裂:autocomplete-plus未启用、语法scope不匹配、provider插件缺失或冲突。需确认插件启用、手动切换右下角grammar、按语言装对provider及依赖,并配置keymap.cson启用tab确认。

Atom 的自动补全默认是关闭的,装完插件不启用、语法识别错、provider 没配对,三者任一缺失都会导致 Ctrl+Space 按了没反应、输字母不弹框、点 . 后空白——这不是“坏了”,而是根本没启动。
确认 autocomplete-plus 已启用且无冲突
autocomplete-plus 是调度中枢,不是补全本身。它被禁用或被旧插件劫持,整个链路就断了。
- 打开
Settings → Packages,搜autocomplete-plus,右侧必须是蓝色Enabled(灰色Disabled或Install都不行) - 禁用所有含
autocomplete-atom-api、ternjs(非atom-ternjs)、autocomplete-clang等可能抢占getSuggestions方法的插件 - Windows/macOS 上必须完全退出 Atom 再重开,后台进程不杀,新插件加载不进内存
检查 grammar 是否匹配 provider 的 scope
补全触发严格绑定 grammar(右下角显示的语法名),不是文件后缀,也不是你“以为”它该是什么。
- 新建未保存文件默认是
Plain Text,哪怕你粘的是 JS 代码;保存为.js后,右下角才会变成JavaScript - 点右下角文字手动切换时,选
JavaScript,不是JavaScript (JSX)或Babel JavaScript;PHP 选PHP,不是PHP (Composer) - provider 插件只响应特定 scope:例如
autocomplete-javascript监听source.js,autocomplete-python监听source.python;scope 错一个字符(如写成javascript)就失效
按语言装对 provider,别混搭或漏依赖
autocomplete-plus 不提供任何建议,真正吐出 document、array_map 或 fetch() 参数的是 provider。装错或缺依赖,补全就是空的。
- JS/TS:想有参数提示,别只装
autocomplete-javascript;atom-ternjs要配.tern-project,ide-typescript要项目有tsconfig.json或装了typescript包 - PHP:
atom-autocomplete-php必须配合php-integrator-base+php-integrator-reflection;缺任一,连use导入的类都识别不了 - Python:
autocomplete-python只补模块和内置函数;要变量级、参数级提示,得加ide-python(自动拉python-language-server) - HTML/CSS:禁用
autocomplete-html和autocomplete-css设置里的fuzzy search,模糊匹配在大型项目里极易卡死主线程
Tab 键不能插入补全项?改 keymap.cson
Atom 默认用 Enter 确认补全,Tab 永远只缩进。想按 Tab 插入并跳转占位符(如 console.log(${1:text})),必须手动绑定。
- Cmd+Shift+P(macOS)或 Ctrl+Shift+P(Win/Linux)→ 输入
Open Your Keymap - 在打开的
keymap.cson中添加:'atom-text-editor[data-grammar~="source.js"]:not([mini])': 'tab': 'autocomplete-plus:confirm'
- 注意 scope 必须精确匹配当前 grammar;Python 是
source.python,不是python
最常被忽略的其实是 grammar 切换和 provider 依赖链——很多人反复重装插件,却没点一下右下角手动切语法,或者装了 atom-autocomplete-php 就以为万事大吉,忘了 php-integrator-reflection 还没启。补全不是开关,是链条,断一环,全不动。











