autocomplete-plus 本身不排序,排序由 provider 决定;常见 provider 中,atom-ternjs 和 TabNine 支持语义或统计加权,而 autocomplete-javascript 仅按字母序;高频词靠前需换 provider、调参或用 snippet 强制置顶。

autocomplete-plus 本身不排序,排序逻辑在 provider
Atom 的补全列表默认不是按“常用度”排的,autocomplete-plus 只负责把 provider 返回的候选词渲染出来,而 provider(比如 autocomplete-javascript、atom-ternjs)决定返回哪些词、以什么顺序返回。所谓“常用词靠前”,其实是 provider 自己做的权重策略,不是编辑器统一控制的。
常见 provider 的排序行为差异明显:
-
autocomplete-javascript:基本按字母序或定义顺序,无使用频率加权 -
atom-ternjs:对全局变量、浏览器 API、已 import 的模块名有轻微优先级提升,但不记录本地调用频次 -
autocomplete-python(jedi 后端):会把当前文件/作用域内刚定义的函数、变量排得更靠前,有一定上下文感知 -
TabNine:真按统计热度排序,但需禁用其他 provider 并设为 primary
想让 console.log、fetch 这类高频词靠前,得换 provider 或调参数
如果你输 con 希望 console.log 第一出现,而不是 confirm 或 constructor,说明当前 provider 没做语义加权。可行路径只有两个:
- 换成
atom-ternjs,并确保项目根目录有.tern-project或jsconfig.json,它会对console、document、fetch等全局对象做显式高亮和前置 - 启用
TabNine并关闭autocomplete-plus的自动触发(Settings → Packages →autocomplete-plus→ 关掉Enable Auto Completion),它会基于数百万代码库统计出console.log是 JS 中 top 3 补全项 - 别用
autocomplete-javascript——它压根不区分“常用”和“冷门”,只做简单前缀匹配
snippets 能绕过排序限制,把高频结构固定置顶
如果目标是让某些代码块“永远第一个出现”,比如输入 log 就弹出 console.log($1);,且不依赖 provider 排序,那就该用 snippet。它不参与 provider 的候选池竞争,而是独立触发、强制置顶:
- 编辑
~/.atom/snippets.cson(Windows 是%USERPROFILE%\.atom\snippets.cson) - 加一段 scope 精确匹配的规则:
'source.js': 'console.log': 'prefix': 'log' 'body': 'console.log($1);' - scope 必须写
source.js,不是javascript或.source.js;保存后重载窗口(Ctrl+Alt+R) - 这样无论
atom-ternjs返回多少候选,只要输入log,snippet 就会作为第一条出现,且按Tab可直接插入
容易被忽略的关键点:provider 加载失败时,你看到的“常用词”其实是历史缓存
右下角显示 JavaScript,输 docu 却只出来 document 和一堆旧文件里写过的 documentation、docUrl?这不是排序问题,而是 atom-ternjs 或 ide-typescript 根本没加载成功。此时 autocomplete-plus 降级为本地 history 匹配,只回显你以前打过的词——看着像“常用”,其实是“打过”。优先检查:atom-ternjs 设置页里 Enable Provider 是否开着、项目根有没有 .tern-project、控制台有没有 Failed to start Tern server 报错。

















