files.exclude 配置存在于用户级和工作区级两个位置:用户级位于系统配置目录下的 settings.json,工作区级位于项目根目录的 .vscode/settings.json,且工作区设置优先级更高。

files.exclude 配置存在哪几个地方
VSCode 的隐藏文件逻辑完全由 files.exclude 控制,它不是系统级隐藏,而是纯前端过滤。这个配置实际存放在两个位置,且有明确优先级:files.exclude 在工作区 .vscode/settings.json 中的定义会覆盖用户级 settings.json 中的同名项。
常见误操作是只改了用户设置却没生效——大概率因为当前项目已有 .vscode/settings.json,里面写了 "files.exclude" 字段,直接屏蔽了你的全局修改。
- 用户级路径(全局生效):
~/Library/Application Support/Code/User/settings.json(macOS)、%APPDATA%CodeUsersettings.json(Windows)、~/.config/Code/User/settings.json(Linux) - 工作区级路径(仅当前文件夹):
你的项目根目录/.vscode/settings.json,该文件若存在且含files.exclude,就以它为准 - 检查是否被覆盖:按
Ctrl+Shift+P→ 输入Preferences: Open Workspace Settings (JSON),看是否有files.exclude字段
备份时必须包含哪些字段和文件
只备份 settings.json 是不够的——files.exclude 可能分散在多个配置文件中,而工作区设置还依赖 .vscode 目录本身。
- 用户级备份:确保导出的
settings.json明确包含"files.exclude"对象,而不是靠默认值或注释掉的规则 - 工作区备份:必须把整个
.vscode/文件夹一起打包,不能只拷settings.json;否则files.exclude规则丢失,且可能连带影响launch.json、tasks.json等 - 别漏掉
search.exclude:它和files.exclude完全独立,如果你希望隐藏的文件也不出现在Ctrl+Shift+F搜索结果里,这个字段也得一并备份 - 通配符写法要一致:比如
"**/.DS_Store": true和"**/._*": true这类规则,不同平台复制时容易因换行或引号格式损坏,建议用 JSON 校验工具过一遍
恢复后为什么隐藏规则不生效
最常遇到的情况是:配置文件明明已还原,但 .env 或 .git 仍显示在资源管理器里。问题通常不在备份本身,而在 VSCode 的缓存和加载机制。
- 工作区设置未重载:关闭再重新打开文件夹(
File > Close Folder→File > Open Folder),不能只刷新窗口 -
files.exclude被其他扩展干扰:某些文件管理类扩展(如 Project Manager)会自行注入排除逻辑,可临时禁用扩展验证 - 规则被
gitignore覆盖:VSCode 默认读取.gitignore并自动添加到排除列表,但它的优先级低于files.exclude;如果发现规则“有时生效有时不”,检查.gitignore是否有冲突条目(如重复排除node_modules) - 路径大小写敏感:在 macOS/Linux 上,
"**/Node_modules/**": true不会匹配小写的node_modules,应统一用小写或使用[Nn]ode_[Mm]odules写法
跨平台迁移时的坑
把 macOS 上备份的 files.exclude 直接挪到 Windows 机器上,大概率出问题——不是语法错,而是路径语义和 glob 行为差异。
-
**/.DS_Store在 Windows 上无意义,但不会报错;真正危险的是**/Thumbs.db这类 Windows 特有文件,在 macOS 备份里可能根本没写,迁移后就得手动补 - 绝对路径类规则(如
"C:\temp\**": true)绝对不能跨平台保留,必须删掉或转成相对路径 - 符号链接处理不同:macOS/Linux 下
**/._*能匹配 Finder 生成的资源分支,Windows 没这东西,但可能有**/desktop.ini,需单独加 - 编辑器版本差异:VSCode 1.85+ 对
**/.*的匹配更严格,旧版允许"**/.*": true一次性排除所有点文件,新版建议拆成"**/.git/**": true、"**/.vscode/**": true等明确项,避免误杀.env
真正麻烦的不是备份动作本身,而是确认每一条 files.exclude 规则在目标环境里是否仍指向你「想隐藏」而非「被意外放行」的文件。每次迁移后,用 Ctrl+P 搜几个典型隐藏文件名(如 .env、.DS_Store)快速验证最可靠。


















