VSCode 格式化代码核心流程:安装格式化插件 → 配置默认格式化器 → 设置自动/手动格式化 → 使用快捷键触发。以下是通用+分语言的详细方案,覆盖前端、Python、Java 等主流场景。

一、必装格式化插件(按语言推荐)
1. 通用全能型(前端/全栈首选)
Prettier - Code formatter(最推荐)
- 作者:esbenp.prettier-vscode
- 支持:JS/TS/HTML/CSS/JSON/Vue/React/Markdown 等几乎所有前端语言
- 优势:规则统一、开箱即用、团队协作友好,解决"格式圣战"
- 安装:
- 打开扩展面板:
Ctrl+Shift+X(Windows/Linux)/Cmd+Shift+X(macOS) - 搜索
Prettier - Code formatter→ 点击「安装」 - 安装后重启 VSCode 生效
- 打开扩展面板:
2. 语言专用插件(按需安装)
| 语言 | 推荐插件 | 插件ID | 核心优势 |
|---|---|---|---|
| Python | Black Formatter | ms-python.black-formatter | 严格统一Python格式,无配置争议 |
| Python | autopep8 | ms-python.autopep8 | 兼容PEP8规范,轻量易用 |
| Java | Language Support for Java | redhat.java | 内置格式化,无需额外插件 |
| C/C++ | C/C++ | ms-vscode.cpptools | 支持ClangFormat,自定义规则 |
| Go | Go | golang.go | 内置gofmt,符合Go官方规范 |
二、核心配置(settings.json + 插件规则)
1. 打开配置文件(2种方式)
- 方式1(推荐):
Ctrl+Shift+P(Windows)/Cmd+Shift+P(macOS)→ 输入Preferences: Open Settings (JSON)→ 回车 - 方式2:
Ctrl+,(Windows)/Cmd+,(macOS)打开设置UI → 点击右上角「打开设置(JSON)」图标
2. 全局基础配置(必加)
json
{
// 1. 全局默认格式化器(设为Prettier)
"editor.defaultFormatter": "esbenp.prettier-vscode",
// 2. 保存时自动格式化(核心!)
"editor.formatOnSave": true,
// 3. 格式化选中代码(手动触发)
"editor.formatOnSelection": true,
// 4. 粘贴代码时自动格式化
"editor.formatOnPaste": true
}
3. 分语言指定格式化器(解决多插件冲突)
json
{
// 前端:统一用Prettier
"[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[vue]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
// Python:指定Black
"[python]": { "editor.defaultFormatter": "ms-python.black-formatter" },
// Java:内置格式化器
"[java]": { "editor.defaultFormatter": "redhat.java" }
}
4. Prettier 自定义规则(项目根目录创建 .prettierrc)
在项目根目录新建 .prettierrc 文件,写入以下规则(按需修改):
json
{
"printWidth": 100, // 每行最大字符数
"tabWidth": 2, // 缩进2空格
"singleQuote": true, // 使用单引号
"semi": true, // 语句末尾加分号
"trailingComma": "es5", // ES5兼容的尾随逗号
"arrowParens": "avoid", // 单参数箭头函数省略括号
"endOfLine": "lf" // 换行符用LF(Unix风格)
}
5. 解决 Prettier + ESLint 冲突(前端必备)
安装依赖:npm install eslint-config-prettier eslint-plugin-prettier --save-dev
在 .eslintrc.js 中添加配置:
javascript
module.exports = {
extends: [
"eslint:recommended",
"plugin:prettier/recommended" // 关键:合并Prettier规则
],
plugins: ["prettier"],
rules: {
"prettier/prettier": "error" // Prettier规则作为ESLint错误
}
};
三、格式化快捷键(手动触发)
1. 全局默认快捷键(最常用)
- 格式化整个文档 :
Shift+Alt+F(Windows/Linux)/Shift+Option+F(macOS) - 格式化选中代码:先选中代码 → 按上述快捷键,或右键「格式化选中内容」
2. 命令面板触发(快捷键冲突时用)
Ctrl+Shift+P(Windows)/Cmd+Shift+P(macOS)- 输入:
- 格式化文档:
Format Document - 格式化选中:
Format Selection - 切换默认格式化器:
Format Document With...→ 选择插件
- 格式化文档:
3. 自定义快捷键(修改 keybindings.json)
- 打开:
Ctrl+K Ctrl+S(Windows)/Cmd+K Cmd+S(macOS) - 点击右上角「打开键盘快捷方式(JSON)」
- 添加配置(示例:设
Ctrl+Alt+L为格式化):
json
[
{
"key": "ctrl+alt+l",
"command": "editor.action.formatDocument",
"when": "editorTextFocus"
}
]
四、完整操作流程(一步到位)
- 安装插件 :优先装
Prettier,再按需装语言专用插件 - 配置 settings.json:复制上述全局+分语言配置,保存生效
- 创建 .prettierrc:在项目根目录添加自定义规则
- 启用自动格式化 :确保
editor.formatOnSave: true,保存文件时自动格式化 - 手动触发 :按
Shift+Alt+F一键格式化,或选中代码后格式化
五、常见问题解决
-
格式化不生效
- 检查:插件是否安装并启用、
defaultFormatter是否正确配置、文件是否保存 - 修复:右键文件 →「格式化文档」→ 选择正确插件 → 设为默认
- 检查:插件是否安装并启用、
-
Prettier 与 ESLint 冲突
- 按上述「冲突解决」配置,安装
eslint-config-prettier屏蔽冲突规则
- 按上述「冲突解决」配置,安装
-
Python 格式化失败
- 确保安装
Python插件 +Black Formatter,并在[python]中指定默认格式化器
- 确保安装
六、最终推荐配置(复制即用)
json
// settings.json 完整配置
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.formatOnSelection": true,
"editor.formatOnPaste": true,
"[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[vue]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[python]": { "editor.defaultFormatter": "ms-python.black-formatter" },
"[java]": { "editor.defaultFormatter": "redhat.java" },
"prettier.singleQuote": true,
"prettier.tabWidth": 2,
"prettier.semi": true
}