根本原因是vscode将格式化错误地塞入全量执行路径,如对node_modules/dist中文件强制格式化,或让eslint与prettier串行触发形成阻塞;应设editor.formatonsavemode为modifications、确保本地安装prettier并关闭全局解析、显式配置prettier.ignorepath及同步files.watcherexclude。

为什么 formatOnSave 一开就卡
根本原因不是 Prettier 或 Clang-format 本身慢,而是 VSCode 把格式化塞进了错误的执行路径:比如对 node_modules/dist 里的 bundle.js 也硬要跑一遍,或者让 ESLint 和 Prettier 串行触发,形成“格式化链”阻塞。大文件(>1000 行)全量解析时,CPU 和 I/O 压力会陡增,你敲完保存后光标卡住半秒,大概率就是它在后台拼命 parse + print。
- 运行命令面板 → 输入
Format Document With,看列出几个提供者;多个意味着冲突风险高 - 检查
eslint.format.enable是否为true;建议设为false,改用 ESLint 的保存前 lint(不自动修) -
editor.formatOnSaveMode默认是file,改成modifications可只处理你改过的几行,性能提升明显
.prettierignore 不生效的常见原因
.prettierignore 不是摆设,它是性能开关。很多人写了却没效果,核心问题就两个:路径没匹配上,或 VS Code 根本没读到它。
- 必须放在项目根目录(即
package.json所在层),内容示例:node_modules/ dist/ build/ *.min.js coverage/
- 显式声明路径:
"prettier.ignorePath": ".prettierignore",避免插件向上查找失败 -
files.watcherExclude要同步配置,否则编辑器仍在后台监听这些目录,白耗资源
本地安装 Prettier 并关闭全局解析
如果项目里没装 prettier,插件会 fallback 到全局安装或内置版本——而全局模块路径查找、版本兼容判断、跨 Node 版本加载,都会拖慢首次格式化速度。
- 确保本地安装:
npm install --save-dev prettier(或yarn add -D prettier) - 在
.vscode/settings.json中强制关闭全局解析:"prettier.resolveGlobalModules": false - 顺手关掉 editorconfig 支持:
"prettier.useEditorConfig": false,避免多一层配置文件解析
C/C++ 项目别只盯 Prettier:Clang-format 的调度逻辑更关键
VSCode 自身不格式化 C/C++ 代码,它只是把 textDocument/formatting 请求转发给注册了该语言能力的扩展。真正干活的是 clang-format 这个独立二进制工具,而 C_Cpp.formatting 和 editor.defaultFormatter 这两个设置谁生效、谁优先,文档几乎不提。
-
C_Cpp.formatting控制的是 ms-vscode.cpptools 插件内置格式器(基于 IntelliSense) -
editor.defaultFormatter才决定clang-format是否上场;两者共存时,后者需明确设为ms-vscode.cpptools或对应 clang-format 插件 ID -
editor.formatOnType默认被禁用,因为 C/C++ 类型推导太耗资源;不要强行开启
.prettierignore 写对了,但 files.watcherExclude 没同步;或者 clang-format 装好了,editor.defaultFormatter 却指向了另一个插件。这些地方不细看日志和运行时行为,很容易反复折腾。











