VSCode需手动配置editor.suggestSelection为first才能默认高亮补全列表首项,否则光标无选中易误操作;该设置可能被语言特定配置或插件覆盖,需检查settings.json中的[language]块并禁用插件验证。

VSCode 默认不会自动选中补全列表的第一项,也不会优先展示“最近使用”项——这是两个独立配置,需要手动开启,且容易因插件或语言服务器干扰而失效。
如何让补全列表默认高亮第一条(editor.suggestSelection)
这个设置控制的是:当补全弹出时,光标默认停在哪一项上。不设它,就永远停在“无选中”状态,按 Tab 或 Enter 会插入当前光标所在行的原始词(不是补全项),极易误操作。
-
editor.suggestSelection设为first:每次弹出补全,第一条自动高亮,按Enter直接确认 - 设为
recentlyUsed:高亮上次用过的那条(但前提是该词确实被完整插入过,仅光标停留不算) - 设为
recentlyUsedByPrefix:更智能一点,按你已输入的前缀匹配“最近用过且以该前缀开头”的项 - 注意:这个设置只影响高亮,不改变补全项的排序逻辑;排序由语言服务器或
editor.suggest.showMethods等其他配置决定
为什么写了 editor.suggestSelection: "first" 还不生效?
常见原因是被语言特定设置覆盖了。VSCode 允许为每种语言单独配置补全行为,这些设置优先级高于全局设置。
- 检查是否在
settings.json中写了带"[javascript]": { ... }或"[python]": { ... }的块,里面可能覆盖了suggestSelection - 某些语言扩展(如 Pylance、TypeScript Server)会强制重置该值,尤其在更新后;可临时禁用插件验证是否冲突
- 终端里运行
code --disable-extensions启动纯净 VSCode,测试是否仍失效——若此时正常,说明是插件问题 - 确保没启用
editor.tabCompletion为on,它会让Tab行为与补全高亮逻辑冲突
怎么让“最近使用”的补全项排前面(editor.suggest.localityBonus 和缓存机制)
VSCode 本身不记录跨会话的“最近使用”,但有短周期局部记忆:同一文件内、相邻几行中刚输入过的符号,会被临时提权。要强化这个效果:
- 开启
editor.suggest.localityBonus(默认true),它会让本地作用域内的变量/函数优先于全局项 - 关闭
editor.suggest.filterSuggestsAfterFiltering(设为false),否则模糊匹配后会丢弃“最近用过但不完全匹配”的候选 - 不要依赖
recentlyUsedByPrefix去记历史——它只缓存本次编辑器生命周期内的选择,关窗口就清空 - 真正稳定的“常用项前置”得靠语言服务器支持,比如 TypeScript 的
typescript.preferences.includePackageJsonAutoImports或 Python 的 Pylancepython.analysis.autoSearchPaths
补全行为高度依赖语言服务器和插件,改完设置记得重启窗口(Developer: Reload Window),而不是只重载设置。最常被忽略的是:你以为改的是全局设置,其实被 [json] 或 [typescript] 块静默覆盖了。


















