Atom补全需autocomplete-plus启用、语言provider安装、语法识别正确三者协同;缺一即失效,常见问题包括插件未启用、冲突插件劫持、scope不匹配或文件未保存导致语法识别为Plain Text。

Atom 的补全不是装个插件就自动好使,必须让 autocomplete-plus、语言 provider、语法识别三者对齐,缺一个就静默失效。
autocomplete-plus 必须启用且不被劫持
它是整个补全链的调度中枢,但默认安装后是禁用状态。很多人点了 Install 就以为完事了,结果敲 cons 一点反应没有。
- 打开 Settings → Packages,搜
autocomplete-plus,右侧按钮必须是蓝色 Enabled,不是灰色Install或Disabled - 禁用所有含
autocomplete-atom-api、ternjs(非atom-ternjs)、language-babel的插件——它们会覆盖getSuggestions方法,导致控制台报Uncaught TypeError: Cannot read property 'getSuggestions' of undefined - Windows 用户务必完全退出 Atom 再重启,后台进程常驻,新插件不重启根本不加载
provider 要按语言装对,scope 必须匹配
补全建议从哪来?不是 autocomplete-plus,而是你装的语言专属 provider。它只在特定语法 scope 下启动,scope 错了,等于没装。
- 写 JavaScript:装
autocomplete-javascript(别用atom-ternjs,易冲突;也别用language-babel替代原生language-javascript) - 写 Python:装
autocomplete-python,但注意它只补模块和内置函数(如os.path.join),不补你自己定义的函数参数——那是ide-python+python-language-server的活 - 右下角状态栏显示的必须是
JavaScript或Python,不是Plain Text、JavaScript (JSX)或Python (Jedi);点它可手动切换 - 新建未保存文件默认是
Plain Text,补全完全失能;必须先保存为.js或.py后缀,触发 language 插件加载
snippets.cson 路径和 scope 写错,补全词库直接失效
像 for、if、console.log 这类代码片段,靠的是 snippets 插件读取 snippets.cson 文件,不是 provider 提供的。
-
snippets.cson必须放在~/.atom/snippets.cson(macOS/Linux)或%USERPROFILE%\.atom\snippets.cson(Windows),放错路径毫无反应 - scope 必须精确:
JavaScript对应source.js,不是javascript或.source.js;JSX 文件实际 scope 是source.js.jsx - 查当前 scope 最准方式:按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Editor: Log Cursor Scope,看控制台输出完整链,比如source.js.jsx meta.function.js - 多个 scope 用逗号分隔,且逗号后必须空一格:
"source.js, source.js.jsx"✅,"source.js,source.js.jsx"❌
Tab 键不插入补全项?keymap.cson 得手动改
Atom 默认用 Enter 确认补全,Tab 永远只缩进。想按 Tab 插入并跳转占位符(比如 print(${1:text})),必须重映射。
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Open Your Keymap - 在打开的
keymap.cson里加这段:
'atom-text-editor[data-grammar~="source.python"]:not([mini])': 'tab': 'autocomplete-plus:confirm'
- 注意:只有装了
python-snippets(或对应语言的 snippets 插件),${1:text}这类占位符才生效;autocomplete-python自身不提供这个能力 - 改完
snippets.cson或keymap.cson后,必须手动重载窗口(Window: Reload),Atom 不会自动监听文件变化
最容易被忽略的是 grammar 识别和 scope 匹配——它不报错、不提示,只是安静地不工作。哪怕 provider 和 autocomplete-plus 都装对了,右下角显示 Plain Text,补全就彻底归零。

















