默认不选中第一项是因为 editor.suggestselection 未设为 "first";需同时配置 editor.tabcompletion: "on"、editor.suggestontriggercharacters: true 和 editor.quicksuggestions.other: true 才能正常用 tab/enter 插入补全项。

补全列表默认不选中第一项?改 editor.suggestSelection
VSCode 弹出补全框后光标悬停在空白处,按 Tab 或 Enter 却插回原始输入(比如输 con 按 Tab 变成 con 而不是 console),根本原因是补全项没被自动选中。这不是界面卡顿,而是 editor.suggestSelection 没设对。
它控制的是「补全弹出瞬间,哪一项被高亮并准备接受确认」:
-
"first":首项自动高亮(最常用,推荐) -
"recentlyUsed":上次用过的项高亮(适合高频切换同一组 API) -
"recentlyUsedByPrefix":按前缀记忆,比如之前输map选过Array.prototype.map,下次输ma就优先高亮它
直接在 settings.json 里加这一行即可生效,无需重启:
{"editor.suggestSelection": "first"}
为什么改了还是不生效?检查语言专属配置和插件覆盖
即使全局设了 "first",某些语言块或插件仍可能把它覆盖掉。常见干扰源:
- 在
settings.json里写了类似"[javascript]": { "editor.suggestSelection": "recentlyUsed" }的语言专属块,会优先生效 - Pylance、TypeScript 插件有时会在后台重置该值,尤其在项目加载后
- 某些旧版 ESLint 或 TSLint 扩展会劫持建议逻辑,导致高亮失效
验证方法:打开命令面板(Ctrl+Shift+P),运行 Developer: Toggle Developer Tools,切到 Console,输入 JSON.stringify(monaco.editor.getConfiguration().editor.suggestSelection) 看实际值。如果返回 "recentlyUsed",说明被覆盖了。
Tab 键不触发补全?先确认 editor.tabCompletion 是字符串 "on"
很多人以为只要补全框弹出来了,Tab 就能选中高亮项——但 VSCode 默认完全禁用这个行为。关键开关是 editor.tabCompletion,而且它必须是字符串 "on",不是布尔值 true。
错误写法:"editor.tabCompletion": true → Tab 依然只缩进
正确写法:"editor.tabCompletion": "on"
另外两个设置要配合:
-
editor.suggestOnTriggerCharacters设为true(确保.、:等字符能触发补全) -
editor.quickSuggestions中"other": true已启用(否则补全框根本不会自动弹)
三者缺一不可。单独调 suggestSelection 没用。
补全项顺序乱?别只盯 suggestSelection,看 editor.suggest.localityBonus 和 editor.suggest.sortingStrategy
editor.suggestSelection 只决定“哪个被高亮”,不决定“列表怎么排”。如果你发现常用函数总沉在底部,可能是排序策略没对齐习惯。
editor.suggest.localityBonus 控制是否优先显示当前文件里已定义的符号(比如你刚写了 getUserById,输 get 就该优先出现它)。设为 true 更符合局部开发直觉。
editor.suggest.sortingStrategy 决定底层排序逻辑:
-
"none":按语言服务器返回顺序(常较乱) -
"files":按文件路径分组(适合大项目快速定位) -
"type":按符号类型分组(函数、类、变量分开排) -
"recentlyUsed":按使用频次动态调整(需开启editor.suggestSelection: "recentlyUsed"才明显)
多数人用 "type" + localityBonus: true 组合,既清晰又贴合上下文。











