离线环境下vscode自动补全生效的前提是语言服务器(lsp)成功加载且具备类型信息,需确认语言模式正确、手动安装完整插件文件夹(含二进制依赖)、配置jsconfig.json/tsconfig.json、安装@types声明包,并通过output面板和developer tools验证lsp状态。

离线环境下 VSCode 的自动补全不是“装了插件就自动好使”,而是必须让语言服务器(LSP)真正跑起来、且有足够类型信息支撑——否则 Ctrl+Space 按了也白按,. 后不弹建议,函数参数全是 (args)。
确认 language mode 和语言服务器是否真加载
右下角状态栏显示 Plain Text 或 HTML?那补全根本不会触发。VSCode 只对识别为 Python、TypeScript、Vue 等语言模式的文件启用对应 LSP。
- 手动切换:按
Ctrl+Shift+P→ 输入Change Language Mode→ 选对语言(如Python) - 检查 LSP 是否启动:打开
Output面板(View → Output),在下拉菜单中选对应扩展名(如Python、Volar),看有没有报错或卡在Downloading... - Vue 文件里
script setup不补全?大概率没装Volar for TypeScript,它和主Volar是两个独立插件,缺一不可
离线环境必须提前带齐语言服务器二进制依赖
像 ms-python.python、esbenp.prettier-vscode 这类插件,安装 .vsix 只是“壳”,首次启用时会静默下载 pyright、prettier CLI 等 native 二进制——离线机器卡在这一步,补全就永远不出现。
- 别只拷
.vsix:在有网机器上,用目标 VSCode 版本打开一个.py文件,等状态栏不再显示Downloading Pyright,再进入%USERPROFILE%\.vscode\extensions\(Windows)或$HOME/.vscode/extensions/(macOS/Linux)拷整个插件文件夹(如ms-python.python-2024.6.0/) - 文件夹名必须规范:格式为
publishername.extensionname-version,不能随便改名,否则 VSCode 不认 - 拷完必须彻底退出 VSCode(包括托盘进程),否则缓存不刷新,新插件不生效
jsconfig.json / tsconfig.json 是 JS/TS 补全的“身份证”
没有 jsconfig.json,VSCode 就把你的 .js 当纯文本处理;没配 compilerOptions.paths,@/components 这种别名路径补全直接失效。
- 最简可用的
jsconfig.json至少要包含:{"compilerOptions": {"module": "nodenext", "target": "es2020", "allowJs": true, "checkJs": true, "moduleResolution": "nodenext"}} - 第三方库补全靠
@types/xxx:比如想让axios.显示方法,得提前在有网机器上运行npm install --save-dev @types/axios,再把node_modules/@types/axios整个拷进离线项目 -
import没写全?补全就断链:漏掉import { foo } from './utils',后面foo.就不会提示任何东西
补全失效时优先查 Developer Tools 而不是设置开关
很多人反复调 editor.quickSuggestions,但真正卡住的是语言服务崩溃或初始化失败——这些错误只在开发者工具控制台里暴露。
- 按
Ctrl+Shift+P→Developer: Toggle Developer Tools→ 切到Console标签页,看有没有红色报错,例如:Failed to start language server for python、Error: Cannot find module 'typescript' -
editor.suggestOnTriggerCharacters必须为true,否则输入.、:不会自动拉框;但即使设对了,LSP 没起来也没用 - Python 补全只显示函数名不显示参数?检查
python.languageServer设置值是不是"Pylance"(不是"Jedi"),并确认已选好解释器(Python: Select Interpreter)
最容易被忽略的一点:离线部署后,补全是否生效,不能只看扩展列表里有没有勾,而要看它第一次被激活时有没有成功加载语言服务器——这个过程没有 UI 提示,只能靠 Output 面板和 Developer Tools 控制台交叉验证。











