vscode默认不响应_、$、数字或中文触发补全,因这些字符被硬编码排除;关键设置是editor.suggestontriggercharacters(控制触发字符)和editor.quicksuggestions(控制上下文自动提示),且依赖语言服务器就绪。

VSCode 的补全提示不会在你敲下 _、$、数字或中文时自动弹出,这不是 bug,是默认设计。真正起作用的是 editor.suggestOnTriggerCharacters 和 editor.quickSuggestions 这两个设置,外加语言服务器是否就绪。
为什么 Ctrl+Space 有时没反应?
不是快捷键坏了,而是触发前提没满足:
-
languageId错误:右下角状态栏显示的是Plain Text或空白,而不是Python、TypeScript等——按Ctrl+Shift+P输入Change Language Mode手动选对 - 语言扩展未启用或崩溃:比如 Python 文件没装
ms-python.python或ms-python.pylance,Ctrl+Space就只能拉出基础词典,没有参数签名 - 焦点不在编辑器内:光标停在终端、搜索框或设置面板里,
Ctrl+Space会直接被系统或 VSCode 其他模块劫持 - 快捷键被覆盖:查
Ctrl+K Ctrl+S→ 搜triggerSuggest,确认editor.action.triggerSuggest绑定的是Ctrl+Space;macOS 用户注意Cmd+Space默认被 Spotlight 占用,VSCode 实际默认是Cmd+Shift+Space
如何让「输入点号后自动弹建议」生效?
editor.suggestOnTriggerCharacters 控制的就是这个行为,但它依赖语言服务器主动注册触发字符。JS/TS 默认支持 .、:、,但 Python 的 Pylance 默认不把 <code>. 当触发字符(避免误触发),所以即使开了该设置,obj. 后也不一定立刻弹窗。
- 确认设置值为
true(不是"on"或1) - 重启窗口或重载窗口(
Ctrl+Shift+P→Developer: Reload Window)才能使变更对已打开文件生效 - 某些语言扩展(如旧版 Python 插件)会忽略此设置,改用自己逻辑——此时只能靠
Ctrl+Space手动唤出 - 若想强制所有语言都响应
.,可配合editor.quickSuggestions+"other": true,但会在字符串里误触发,慎开
自定义触发补全的快捷键(比如 Alt+/)
直接改绑定比记新组合更可靠,尤其当 Ctrl+Space 被输入法或系统占用时:
- 按
Ctrl+K Ctrl+S打开快捷键面板 - 搜
triggerSuggest,找到editor.action.triggerSuggest - 右键 →
更改键绑定,按下你想用的组合,例如Alt+/ - 如果提示“冲突”,点右侧的
×删除原绑定,再试一次 - 注意:不要绑定到已被终端捕获的组合(如
Ctrl+C),否则编辑器收不到事件
哪些字符根本没法设成触发字符?
VSCode 不允许把 0-9、_、$、中文、空格等加入 editor.suggestOnTriggerCharacters 列表——它们被硬编码排除在外,语言服务器也通常不监听这些。
- 这是为了防止在变量名中间(如
user_name|)或数字字面量(如123|)时疯狂弹窗 - 如果你真需要这类行为,唯一办法是关掉
editor.suggestOnTriggerCharacters,只靠editor.quickSuggestions+"other": true,但代价是补全列表更噪、性能略降 - 部分插件(如 Tabnine、GitHub Copilot)会绕过这套机制,用自己的方式监听按键,但这不属于 VSCode 原生补全体系
最常被忽略的一点:改完设置后不重载窗口,改动对已打开的文件无效;而语言服务器一旦崩溃,哪怕设置全对,Ctrl+Space 也只会返回空列表或基础单词——先看右下角语言标识,再查设置,最后动快捷键。











