VSCode中局部函数排序靠后是因语言服务器默认高权重及客户端轻量加权所致,需同时设置"editor.suggest.sortSelectedItems": false和"editor.suggest.localityBonus": true才生效。

为什么局部函数总被 console.log 挤到第二页
VSCode 默认不给本地变量/函数“特权”,哪怕你刚在当前文件写了 const formatDate = () => {},输 form 时它仍可能排在 FormData 或 formAction 后面。这不是 bug,是语言服务器(如 TypeScript Server)返回的 sortText 值更高,而 VSCode 客户端默认只做轻量加权——editor.suggest.localityBonus 只加分,不插队。
必须同时关闭重排 + 开启本地加成
单独开 editor.suggest.localityBonus 几乎无效,因为 VSCode 会在你选中某项后立刻把它“重排”到顶部,覆盖掉刚加的本地分。真正起作用的是两个配置的组合:
-
"editor.suggest.sortSelectedItems": false—— 关闭历史选择干扰,让本地性权重不被冲掉 -
"editor.suggest.localityBonus": true—— 当前文件、当前作用域内声明的函数/变量获得匹配加分
这两个必须一起写进 settings.json,缺一不可。推荐放在用户级配置里,避免工作区覆盖。
JS/TS 文件要额外防类型接口抢风头
TypeScript 语言服务默认把接口(interface User)、类型别名(type Status)标为高优先级,尤其当它们和变量名同名时(比如有 interface User 和 const user = {}),输 us 补全第一项往往是 User 接口,而非变量 user。这不是排序问题,是类型语义优先级设计。
- 在
tsconfig.json或jsconfig.json中加"allowSyntheticDefaultImports": true,缓解因导入缺失导致的类型误判 - 设
"typescript.preferences.includePackageJsonAutoImports": "explicit",避免第三方包同名类型自动顶上来 - 禁用
"editor.suggest.filterSuggests": true,否则模糊匹配(如arr→Array.from)会被直接过滤掉
补全没出现?先确认语言服务器是否识别了你的函数
写了 function myHelper() {} 却补全列表里压根没有它,大概率不是排序问题,而是语言服务器根本没把它纳入建议源:
- 检查右下角语言模式是否为
JavaScript或TypeScript,不是Plain Text - 确保函数声明用了标准语法(
function、const xxx = () => {}),非 IIFE 或未声明变量直接赋值 - 在 TS 项目中,如果函数没导出且不在当前文件作用域,可能需要
export或类型标注才能被推导 - 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),在 Console 里执行editor.action.triggerSuggest,看返回的建议数组里有没有你的函数名
本地函数能被看见,才是调排序的前提;否则所有权重设置都只是在给空气加分数。


















