VS Code 格式化和重构功能失效主因是语言服务未正确加载或语言 ID 不匹配,需检查右下角语言模式、Format Document With… 列表是否为空,并通过开发者工具控制台排查报错。

右键“格式化文档”置灰或点击无反应,不是菜单坏了,而是 VS Code 根本没识别出语言类型,或没注册可用的格式化器——90% 的情况,点一下右下角语言模式就能解决。
右下角显示 Plain Text 或 Unknown 就别按了
VS Code 的格式化能力严格绑定语言 ID。哪怕文件叫 index.ts,只要右下角写着 Plain Text,editor.action.formatDocument 命令就不会注册,右键菜单必然灰色、快捷键也完全静音。
- 点击右下角语言标识 → 输入真实语言名(如
typescriptreact、vue-html、jsonc)→ 回车确认 - 验证是否生效:按
Ctrl+Shift+P→ 输入Format Document With…→ 列表不为空才说明语言识别成功 - 长期方案:在
.vscode/settings.json中加"files.associations": { "*.config": "jsonc", "*.vue": "vue-html" },避免每次手动切
Format Document With… 列表为空?检查格式化器注册状态
列表空 ≠ 没装插件,而是插件没激活、语言 ID 不匹配,或服务被禁用。Volar 2.x、ESLint 插件更新后最常触发这类问题。
- 打开
Ctrl+Shift+P→Developer: Toggle Developer Tools→ Console 标签页 → 再点右键格式化 → 看是否有Cannot find module 'prettier'或command 'editor.action.formatDocument' not found - 运行
Format Document With…,若列表里没有Prettier或ESLint,说明插件未为当前语言注册提供者 - 常见修复:
[vue-html]语言块需显式配"editor.defaultFormatter": "esbenp.prettier-vscode";[xml]需确认xml.format.enable为true
F2 重命名和 Ctrl+. 重构菜单失效?先看光标落点和语言服务
F2 不是快捷键失效,是语言服务器没接管当前符号。它只对声明位置或可跳转引用有效,停在字符串里、注释里、或 Plain Text 模式下,F2 必然一闪而过或无响应。
- 光标必须落在变量名本身(如
const user中的user),不能停在引号内、括号外、或 import 路径字符串中 - 按
Ctrl+Click能跳转到定义,才是 F2 可用的前提;跳不过去,说明语言服务没加载或配置有误 -
Ctrl+.重构菜单只在光标落在函数名、变量名、或选中表达式时出现;选中a + b后按它,才可能看到“提取为变量” - 跨文件重命名失败?检查导出是否为具名(
export function foo()),导入是否为具名(import { foo }),否则语言服务器无法建立符号映射
真正容易被忽略的点是:格式化和重构都依赖语言服务的完整生命周期。插件更新、工作区切换、远程连接断开,都可能导致服务重启失败——此时右下角语言模式看似正常,但 Format Document With… 列表为空、F2 无响应、Ctrl+Click 失效,三者往往同时发生。别急着重装,先看 Developer Tools Console 里的第一行报错。


















