应将 editor.suggestselection 设为 "recentlyusedbyprefix",以优先展示与输入前缀最匹配的补全项,如输入 fil 时 filter 比 find 更靠前,避免最近用过的无关项干扰。

补全建议总被无关项顶到前面?调 editor.suggestSelection
VSCode 默认把最近用过的建议排第一,但实际写代码时,你更想要的是「最匹配当前上下文」的项——比如输入 arr. 时,map 比 myCustomHelper 更可能被选中,哪怕后者刚用过。这时候 editor.suggestSelection 就得改。
它有三个可选值:"first"(固定第一个)、"recentlyUsed"(默认,按使用频率)、"recentlyUsedByPrefix"(按前缀匹配度排序)。真正起作用的是最后一个:
-
"recentlyUsedByPrefix"会让 VSCode 优先展示和你已输入字符前缀更吻合的项,比如输fil,filter会比find更靠前 - 若设为
"first",每次弹出都默认高亮第一个,容易误按;设为"recentlyUsed"则常把旧变量顶上来,干扰函数调用 - 该配置对 JavaScript/TypeScript 效果最明显,Python 中 Pylance 也会尊重这个排序逻辑
字符串里补全太吵?关掉 strings 上下文触发
你在写 console.log("user_") 时,补全框突然弹出一堆变量名,不仅遮挡代码,还容易按错——这通常是因为 editor.quickSuggestions 的 strings 字段设成了 true。
绝大多数场景下,字符串内部不该自动触发补全,除非你在做模板字符串插值或正则表达式。正确做法是显式关闭:
- 在
settings.json中确保:"strings": false - 如果真需要字符串内补全(比如 Vue 模板中
{{ user. }}),只针对特定语言单独开:"editor.quickSuggestions": { "vue": { "strings": true } } - 注意:即使
strings关了,Ctrl+Space仍可手动唤出补全,只是不自动弹
补全列表塞满“Unknown (12)”?检查语言服务器响应权重
当补全建议顶部频繁出现 Unknown (12) 这类占位符,说明语言服务器返回了无效或超时响应——不是配置问题,而是服务端“权重”没跟上:VSCode 把未响应的服务建议排到了前面,挤掉了真实可用项。
这不是调设置能直接解决的,得从服务层入手:
- 打开输出面板(
Ctrl+Shift+U),切换到对应语言服务(如Pylance或TypeScript Server),看是否有Connection to server got closed或timeout - 大项目下,Pylance 默认启用
typeCheckingMode: "off"可降低负载,避免补全卡顿导致权重失衡 - 禁用非必要扩展(尤其是多个 LSP 同时跑 Python/JS 的插件),冲突会拉低有效响应率
editor.suggest.localityBonus 真正影响的是哪部分权重?
这个配置名字很抽象,但它干的事很实在:让当前文件里定义的变量、函数,在补全列表中获得更高排序权重。比如你在 utils.js 里写了 formatDate,那么在同文件输 form 时,它会比全局 lodash.format 更靠前。
启用后效果明显,但要注意边界:
- 仅对同文件内声明有效,跨文件 import 的符号不受此权重加成
- 设为
true是默认行为,不用额外配;设为false会削弱本地变量优势,适合大型 monorepo 中想优先看到包导出 API 的场景 - 和
editor.suggestSelection: "recentlyUsedByPrefix"配合使用时,本地匹配 + 前缀吻合 = 最优排序
权重调整这事,从来不是单点开关能搞定的。它藏在语言服务器响应质量、前缀匹配逻辑、本地符号优先级三者之间,漏掉任何一环,补全就会“感觉不对”。











