本质是tsserver初始化失败,因符号解析、类型检查或node_modules扫描阻塞;常见于无tsconfig.json却启动全量服务、远程oom、嵌套依赖扫描或auto-imports配置不当。

“正在获取代码操作”卡死,本质是 TypeScript 语言服务(tsserver)在远程或本地初始化失败,不是网络慢,而是进程卡在符号解析、类型检查或 node_modules 扫描上。
为什么 tsserver 会卡在“正在获取代码操作”
这个提示来自 VSCode 的 TypeScript 插件,它在等待 tsserver 返回可用的代码操作(如“提取到函数”“重命名”“快速修复”)。常见触发点包括:
- 工作区根目录下没有
tsconfig.json,但 VSCode 仍尝试为所有.ts/.tsx文件启动完整语言服务 - 远程开发时,
tsserver进程内存超限(默认无限制),被系统 OOM Killer 杀掉后反复重启失败 - 本地项目含大量
@types或嵌套node_modules,tsserver 同步扫描依赖树时阻塞主线程 -
typescript.preferences.includePackageJsonAutoImports设为"on",导致打开任意 TS 文件前就拉取全部dependencies类型定义
如何快速验证是否是 tsserver 问题
别猜,直接看进程和日志:
- 打开命令面板
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools→ 切到Console标签页,搜tsserver或ERR,重点关注TypeError: Cannot read property 'getProgram' of undefined这类报错 - 终端执行
ps aux | grep tsserver(macOS/Linux)或任务管理器搜tsserver(Windows),确认进程是否存在、CPU 是否持续 100% - 打开命令面板 →
TypeScript: Restart TS Server,如果按钮灰掉或执行后无反应,基本可断定服务已僵死
绕过卡死的实操配置(不删文件、不重装)
以下修改均在当前工作区的 .vscode/settings.json 中生效,优先级高于全局设置:
- 强制降级语言服务:加入
"typescript.preferences.includePackageJsonAutoImports": "auto"(不是"on") - 禁用非必要类型推导:加入
"typescript.preferences.useAliasesForRenames": false - 限制远程端内存(Remote-SSH 场景必需):
"remote.SSH.remoteServerEnv": { "VSCODE_NODE_OPTIONS": "--max-old-space-size=2048" } - 若项目实际不用 TS,直接关服务:加入
"typescript.preferences.disableSuggestions": true和"javascript.preferences.disableSuggestions": true
改完保存,**必须完全关闭当前窗口再重新打开工作区**,reload window 不生效。
容易被忽略的关键点
这个提示卡住时,很多人去查网络代理或重装插件,但真正卡点往往藏在两个地方:
- 你本地开了
tsconfig.json,但里面写了"include": ["**/*"]却没配"exclude",导致 tsserver 硬扫整个node_modules/.bin下的脚本文件 - Remote-SSH 连接后,
~/.vscode-server目录权限被改过(比如手动chown过),导致 tsserver 启动时无法写缓存,静默失败
遇到后者,删掉远程 ~/.vscode-server 并重连,比调任何配置都快。











