VS Code 里的全局设置(User Settings)和工作区设置(Workspace Settings)settings.json详解
核心区别概览
特性 | 全局设置 | 工作区设置 |
---|---|---|
作用范围 | 当前用户的所有 VS Code 实例和项目 | 仅当前打开的工作区(项目) |
配置文件路径 | 系统用户目录下的 Code/User/settings.json | 项目根目录下的 .vscode/settings.json |
配置优先级 | 低(被工作区设置覆盖) | 高(覆盖全局设置) |
适用场景 | 个人开发习惯和偏好 | 项目特定的编码规范和环境配置 |
是否纳入Git | 绝不 | 强烈建议 |
全局设置详解
1. 定位与用途
全局设置是你的个人偏好中心。它存放那些无论你打开哪个项目都希望保持一致的配置。
2. 配置文件位置
-
Windows:
%APPDATA%\Code\User\settings.json
-
macOS:
$HOME/Library/Application Support/Code/User/settings.json
-
Linux:
$HOME/.config/Code/User/settings.json
3. 典型配置内容(示例)
{// ====== 外观与体验 ======"workbench.colorTheme": "One Dark Pro Darker","workbench.iconTheme": "vscode-icons","window.zoomLevel": 1,// ====== 编辑器行为 ======"editor.fontSize": 16,"editor.fontFamily": "'Cascadia Code', 'Fira Code', Consolas, 'Courier New', monospace","editor.fontLigatures": true, // 启用连字,Fira Code等字体需要"editor.lineHeight": 1.5,"editor.minimap.enabled": false, // 关闭代码小地图"editor.wordWrap": "on", // 代码换行// ====== 文件与窗口 ======"files.autoSave": "afterDelay","files.autoSaveDelay": 1000,"explorer.confirmDelete": false, // 删除文件时不确认// ====== 终端 ======"terminal.integrated.shell.windows": "C:\\Windows\\System32\\bash.exe", // 使用WSL"terminal.integrated.fontSize": 14,// ====== 扩展相关 ======// 这些配置可能由你安装的扩展提供"emmet.triggerExpansionOnTab": true,// ====== 语言无关的通用编码习惯 ======"editor.tabSize": 2,"editor.insertSpaces": true,"editor.detectIndentation": false, // 禁止自动检测缩进,使用我的统一设置"files.trimTrailingWhitespace": true, // 保存时删除行尾空格"files.insertFinalNewline": true, // 保存时在文件末尾添加换行// ====== 语言特定设置(你的个人偏好) ======"[markdown]": {"editor.wordWrap": "bounded","editor.quickSuggestions": false},"[json]": {"editor.quickSuggestions": {"strings": true},"editor.suggest.insertMode": "replace"}
}
4. 最佳实践
-
主题、字体、快捷键等个性化设置放在这里。
-
你个人偏好的代码格式化风格(如默认缩进2空格)。
-
各种扩展的全局配置。
-
这个文件不应该被提交到 Git。
工作区设置详解
1. 定位与用途
工作区设置是项目的强制规范中心。它确保所有在该项目上工作的开发者都使用相同的开发环境配置。
2. 配置文件位置
位于项目根目录下的 .vscode
文件夹中:
[project-root]/.vscode/settings.json
如果 .vscode
文件夹或 settings.json
文件不存在,你需要手动创建它们。
3. 典型配置内容(示例)
{// ====== 项目特定的缩进规范 ======// 覆盖全局的2空格,强制此项目使用4空格"editor.tabSize": 4,"editor.insertSpaces": true,"editor.detectIndentation": false, // 重要:关闭检测,强制使用项目规范// ====== 语言执行环境 ======// 指定项目使用的 TypeScript 版本,优先使用项目本地的 node_modules 中的版本"typescript.preferences.useLocalTsdk": true,"typescript.tsdk": "node_modules/typescript/lib",// ====== 项目特定的文件排除 ======"files.exclude": {"**/node_modules": true,"**/dist": true,"**/.build": true,"*.log": true},"search.exclude": {"**/node_modules": true,"**/dist": true},// ====== 保存时的自动化操作 ======"editor.codeActionsOnSave": {"source.fixAll.eslint": "explicit", // 保存时运行 ESLint 修复"source.organizeImports": "explicit" // 保存时整理 import 语句},"editor.formatOnSave": true, // 保存时自动格式化"eslint.validate": [ // 指定 ESLint 校验的语言"javascript","javascriptreact","typescript","typescriptreact"],// ====== 项目特定的语言服务器设置 ======"python.pythonPath": "venv/bin/python", // 指定 Python 虚拟环境"python.linting.enabled": true,// ====== 项目特定的扩展设置 ======// 例如,为此项目配置 Live Server 的端口"liveServer.settings.port": 3001,// ====== 调试配置 ======// 虽然主要在 launch.json 中,但有些相关设置可以在这里"debug.onTaskErrors": "showErrors",// ====== 语言特定设置(项目规范) ======// 强制此项目的 JSON 文件使用2空格,即使编辑器全局是4空格"[json]": {"editor.tabSize": 2},"[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode", // 指定此项目JS的格式化工具"editor.tabSize": 2},"[typescript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}
}
4. 最佳实践
-
项目缩进规范(2空格 vs 4空格 vs Tab)。
-
保存时的自动化操作(如自动格式化、ESLint修复)。
-
指定项目使用的特定语言版本或SDK。
-
配置项目专用的扩展设置。
-
定义项目的文件排除列表(如构建输出目录)。
-
这个文件必须被提交到 Git,以便团队协作。
如何管理和编辑它们
方法1:通过命令面板(推荐)
-
打开全局设置(JSON):
Ctrl+Shift+P
-> 输入Preferences: Open User Settings (JSON)
-
打开工作区设置(JSON):
Ctrl+Shift+P
-> 输入Preferences: Open Workspace Settings (JSON)
注意:只有在打开了一个文件夹作为工作区时,这个命令才可用。
方法2:通过设置UI
-
按
Ctrl+,
打开设置界面。 -
在顶部,你可以看到一个切换按钮,可以在「User」和「Workspace」之间切换。
-
在设置UI中修改后,可以点击右上角的「打开设置(JSON)」图标,查看生成的 JSON 代码。
方法3:直接编辑文件
你可以直接用 VS Code 或其他编辑器打开对应的文件路径进行编辑。
配置冲突与优先级:实战分析
假设你的配置如下:
-
全局设置:
{"editor.tabSize": 2,"editor.fontSize": 14 }
-
工作区设置:
{"editor.tabSize": 4,"files.autoSave": "onFocusChange" }
最终生效的结果:
配置项 | 生效值 | 原因 |
---|---|---|
editor.tabSize | 4 | 工作区设置覆盖了全局设置 |
editor.fontSize | 14 | 工作区未设置,继承全局 |
files.autoSave | onFocusChange | 工作区设置了新值 |
简单规则:工作区设置 > 全局设置。工作区设置中定义的任何值都会直接覆盖全局设置中的同名值。
总结
-
全局设置 = 你的个人习惯(主题、字体、个人快捷键)
-
工作区设置 = 项目的强制规范(缩进、格式化、环境路径)