vscode 1.80+ 已彻底移除 editor.suggestsorting,排序由语言服务器(如 ts server)主导;需配合 editor.suggest.sortselecteditems: false、localitybonus: true 及语言专属设置调整优先级,并关闭干扰项以优化高频补全位置。

VSCode 1.80+ 版本已彻底移除 editor.suggestSorting,任何试图通过它控制排序的配置都无效——这不是你配错了,是它真没了。
为什么改了 settings.json 还没效果?检查语言专属覆盖
VSCode 的补全行为优先级顺序是:[javascript] > [typescript] > 工作区设置 > 用户设置。你以为改的是全局,其实被语言块静默覆盖了。
- 打开
settings.json,搜索"[javascript]": {或"[typescript]": {,确认里面没有重复或冲突的editor.suggest.*配置 - 如果存在,比如
"[javascript]": { "editor.suggestSelection": "recentlyUsed" },它会直接覆盖你全局设的"first" - 临时验证方法:在
settings.json顶部加一句"editor.suggestSelection": "first",再在 JS 文件里按Ctrl+Space,看是否高亮首项;不生效就说明被语言块劫持了 - 重启窗口(
Developer: Reload Window)比重载设置更可靠,尤其插件启用/禁用后
editor.suggest.sortSelectedItems: false 是前提,不是可选项
这个配置关的是“历史选择自动置顶”逻辑。不开它,你选 10 次 useState,下次输 us 它仍可能被 useCallback 或 UserSettings 类型挤到第二页。
- 必须和
editor.suggest.localityBonus: true配合使用,单独开后者几乎没感知 - 它只对“客户端权重调整”起效,不影响语言服务器返回的原始顺序(比如 TS Server 给接口名打的
sortText值依然占主导) - 如果你常写自定义 Hook 或工具函数,且希望它们出现在补全前列,这个组合是目前最可控的手段
- 注意:设为
false后,你手动选中的项不会再“记住位置”,每次都要重新适应排序逻辑
怎么让 console.log、useState 这类高频项稳定靠前?
VSCode 不支持“主观常用项置顶”,但可通过缩小候选池 + 提升匹配精度来逼近效果。
- 关掉干扰项:
"editor.suggest.showClasses": false、"editor.suggest.showInterfaces": false,尤其在 TS 项目里能大幅减少类型声明抢位 - 限制自动导入范围:
"typescript.preferences.includePackageJsonAutoImports": "explicit",避免lodash.map盖过原生Array.prototype.map - 代码片段 prefix 要短于内置补全:
log和内置console.log冲突,改用cl或co,VSCode 会优先匹配更精确的 prefix -
"editor.snippetSuggestions": "top"确保你的 snippet 永远在列表最上方,不受其他权重影响
editor.tabCompletion: "on" 和 editor.suggestSelection 必须协同
想按 Tab 就插入首条建议,光开 tabCompletion 不够——如果 suggestSelection 没设成 "first",Tab 可能跳过建议直接缩进。
-
editor.tabCompletion必须是字符串"on",不是布尔值true;设成"off"或删掉,Tab 永远只缩进 - 两者必须同时生效:一个决定“有没有默认选中项”,一个决定“Tab 键对那个选中项做什么”
- 在 JSX/TSX 中,
tabCompletion: "on"还能触发属性补全(如cl<tab></tab>→className=""),而 Enter 可能闭合标签,这点容易被忽略 - 若 Tab 仍不采纳,检查是否启用了
editor.suggest.snippetsPreventQuickSuggestions,某些 Snippet 插件会主动压制建议弹出
真正难调的不是参数本身,而是语言服务器返回的 sortText ——你改不了它,只能收窄范围、压低干扰、提升局部匹配权重。多数人卡在“以为排序可控”,其实是在和 TS Server 或 Pylance 的内部策略博弈。











