editor.suggestSorting 已被 VSCode 1.80+ 彻底移除,补全排序由语言服务器 sortText 主导;需同时配置 editor.suggestSelection="first"、editor.suggest.sortSelectedItems=false 和 editor.suggest.localityBonus=true 才有效。

editor.suggestSorting 已被移除,别再配它
VSCode 1.80+ 版本彻底删除了 editor.suggestSorting 配置项,设了也无效。这不是你 syntax 错,是它真没了。补全排序现在由语言服务器(如 TS Server、Pylance)返回的 sortText 字段主导,VSCode 客户端只做有限加权——比如前缀匹配度、局部性(localityBonus)、大小写等。
真正能调的只有这几个关键配置
想让高频项(如 console.log、useState)稳定靠前,得组合使用以下三项:
-
editor.suggestSelection设为"first":确保每次弹出后首项高亮,避免被“最近用过”干扰 -
editor.suggest.sortSelectedItems设为false:关掉“手动选过的下次自动置顶”,否则useCallback可能挤掉你刚选的useState -
editor.suggest.localityBonus设为true:提升当前文件内定义的函数/变量权重,对自定义 Hook 或工具函数最有效
这三者必须同时生效才起作用;单独开 localityBonus 几乎无感。
语言专属设置会静默覆盖全局配置
VSCode 补全行为优先级是:[javascript] > [typescript] > 工作区设置 > 用户设置。你以为改了全局 editor.suggestSelection,其实被语言块劫持了。
- 打开
settings.json,搜索"[javascript]": {或"[typescript]": { - 检查里面是否含重复的
editor.suggest.*配置,比如"editor.suggestSelection": "recentlyUsed" - 临时验证:在
settings.json顶部加一行"editor.suggestSelection": "first",保存后在 JS 文件里按Ctrl+Space,看首项是否高亮;不生效就说明被语言块覆盖
改完记得执行 Developer: Reload Window,比单纯重载设置更可靠。
高频项靠前 ≠ 主观置顶,得靠缩小候选池
VSCode 不支持把 console.log 永远钉在第一位。但你可以逼近效果:
- 禁用自动 import 补全:设
typescript.preferences.includePackageJsonAutoImports为"explicit",防止第三方包同名函数(如lodash.map)抢走原生Array.prototype.map - 自定义 snippet 的
prefix要短且唯一:比如设log为l,避开和内置console.log完全重叠,否则排序取决于 LSP 返回顺序,不可控 - 关闭干扰项:如
editor.wordBasedSuggestions设为false,避免单词联想污染补全列表
补全排序本质是客户端对服务端返回结果的二次加权,而服务端逻辑(TS Server、Pylance、Rust Analyzer)各自独立,且不开放排序接口——这意味着你永远无法完全掌控顺序,只能在客户端层尽力收窄偏差范围。


















