VS Code使用Prettier时Format Selection格式化整个文档问题咨询
问题根因
- Prettier扩展配置迭代:网上流传的旧版片段格式化配置项已在Prettier v9+版本中废弃,修改无效;新版本默认未开启范围格式化能力,触发格式化时会直接执行全文档操作。
- 格式化程序注册冲突:若未将Prettier设置为TypeScript文件的唯一默认格式化程序,VS Code会回退到内置TypeScript语言服务执行格式化,该服务在1.68版本中存在范围格式化识别bug,会直接触发全文档格式化,同时因未正确注册范围格式化服务,右键菜单会隐藏「Format Selection with」选项。
- 项目级配置覆盖:若项目根目录存在
.prettierrc、.editorconfig配置中开启了requirePragma参数,会导致Prettier忽略选中的代码范围,强制扫描全文档匹配带格式化注解的内容,最终执行全文档格式化。
修复方案
- 修正默认格式化程序配置
打开VS Code用户级settings.json,添加如下配置,强制指定TS/TSX文件的默认格式化程序为Prettier:"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 开启新版本Prettier的范围格式化能力
在settings.json中添加当前版本有效的配置项,替换所有网上流传的已废弃旧配置:
配置保存后完全重启VS Code,右键菜单即可恢复「Format Selection with」选项。"prettier.enableRangeFormatting": true, "prettier.useEditorConfig": false - 排查项目级配置冲突
打开项目根目录的.prettierrc配置文件,删除"requirePragma": true配置项,避免范围识别逻辑被干扰。
验证方法:选中任意一段TS代码,按下快捷键
Ctrl+K Ctrl+F(Mac端为Cmd+K Cmd+F)触发片段格式化,若git diff仅存在选中行的变更记录,即为修复成功。
内容的提问来源于stack exchange,提问作者Sha
相关产品推荐
相关产品推荐

