补全建议被冷门项挤到后面,是因为vscode 1.80+移除了editor.suggestsorting,排序由语言服务器决定;需启用localitybonus并关闭sortselecteditems,同时检查语言专属设置是否覆盖全局配置。

为什么补全建议总被“冷门项”挤到后面?
VSCode 1.80+ 版本起,editor.suggestSorting 已彻底移除,补全顺序由语言服务器(如 TS Server、Pylance)原始返回决定,客户端无法全局重排。你改了 settings.json 却没效果,大概率是因为排序权重根本不在编辑器侧——它在语言服务里,而你只能微调客户端如何“看待”这些权重。
必须开的两个权重开关:localityBonus 和 sortSelectedItems
editor.suggest.localityBonus: true 让当前文件中定义的变量、函数、类型,在补全列表中获得额外加分;editor.suggest.sortSelectedItems: false 是前提——关掉它,才能让 locality bonus 生效。单独开 localityBonus 几乎无感,因为默认 sortSelectedItems: true 会把历史选中的项强行置顶,覆盖掉位置权重。
- 高频自定义 Hook(如
useApi、useAuth)出现在靠前位置,依赖的就是这个组合 - 设为
false后,你手动选过的项不再“记住”,每次补全都按新权重实时计算 - 它只影响客户端加权逻辑,不改变语言服务器返回的原始顺序(比如 TS Server 给
fetchUser打的sortText值仍占主导)
语言专属设置会静默劫持全局配置
VSCode 补全行为优先级是:[javascript] > [typescript] > 工作区设置 > 用户设置。你在顶层设了 "editor.suggestSelection": "first",但只要 settings.json 里存在 "[javascript]": { "editor.suggestSelection": "recentlyUsed" },它就会生效——且不会报错、不提示冲突。
- 打开
settings.json,全局搜索"[javascript]"或"[typescript]"块,删掉或统一其中的editor.suggest.*配置 - 临时验证:在
settings.json顶部加一句"editor.suggestSelection": "first",在 JS 文件里按Ctrl+Space,看首项是否高亮;不生效就说明被语言块覆盖了 - 改完务必执行 Developer: Reload Window,比单纯重载设置更可靠
AI 补全建议总在底部?别用 recentlyUsed
AI 插件(Copilot/Tabnine/IntelliCode)的建议默认混入普通补全列表,但 editor.suggestSelection: "recentlyUsed" 或 "first" 会压制 AI 的置信度排序。真正对 AI 友好的是 recentlyUsedByPrefix:它按你输入的前缀(如 us)匹配候选,再结合最近使用频率排序,AI 生成的 useState、useEffect 就更容易浮上来。
- 确保
editor.suggestSelection设为recentlyUsedByPrefix,不是recentlyUsed - 检查 AI 插件开关:
github-copilot.enableInlineSuggest、editor.intellisense.experimental.suggestComplete必须为true - Tabnine 用户注意:
tabnine.maxNumberOfResults别设太小(如3),否则截断多分支建议,AI 项直接消失
权重调整不是魔法,它只是让 VSCode 更“偏心”地展示你真正需要的东西——但前提是语言服务器先给它一个可操作的原始排序,而你得确保自己没在配置里层层覆盖掉关键开关。











