VS Code 远程连接中隐藏文件靠的是本地 files.exclude 设置,它仅前端过滤资源管理器和全局搜索结果,不改变服务器文件状态;必须配置在工作区 .vscode/settings.json 中才生效,用户级设置不下发到远程端。

远程连接中隐藏文件靠的是 VS Code 的 files.exclude 设置,不是 SSH 或服务器权限控制
很多人以为“远程连接里看不到某个文件”是因为服务器上设置了隐藏属性(比如 Linux 的 .git),其实不是。VS Code 远程连接后,文件树的显示逻辑完全由本地客户端的 files.exclude 规则驱动——它只是前端过滤,不改变服务器上任何文件或目录的真实状态。
这个设置分三层生效:工作区级(推荐)、用户级、远程机器级(极少用)。你改的是本地 VS Code 打开的那个远程文件夹对应的 .vscode/settings.json,不是服务器上的配置文件。
-
files.exclude只影响资源管理器(左侧文件树)和搜索(Ctrl+Shift+F)结果,不影响终端命令、调试器或扩展读取文件 - 通配符写法要小心:
"**/node_modules": true会递归隐藏所有子目录下的node_modules;"node_modules": true只隐藏根目录下的 - 如果某文件仍显示,检查是否被
files.watcherExclude或其他扩展(比如 GitLens)的设置覆盖了
files.exclude 在远程连接中必须写进工作区设置,不能只写在用户设置里
VS Code 的远程开发模式下,用户级设置(settings.json 在本地 User 目录)默认**不下发到远程端**。也就是说,你在本地全局设了 "**/.env": true,远程窗口里照样能看到 .env 文件。
正确做法是:连接成功后,打开远程文件夹 → 按 Ctrl+Shift+P 输入 Preferences: Open Workspace Settings (JSON) → 在弹出的 .vscode/settings.json 里添加:
{
"files.exclude": {
"**/.git": true,
"**/__pycache__": true,
"**/*.pyc": true,
"**/dist": true
}
}
- 这个文件保存在远程服务器的项目根目录下(
.vscode/子目录),下次别人用同一路径远程打开时也会继承该规则 - 如果想对所有远程项目统一隐藏,可以手动在远程机器的
~/.vscode-server/data/Machine/settings.json里加,但不推荐——升级 server 版本时容易丢失 - 注意路径斜杠方向:Windows 本地连 Linux 远程,依然用
/,不是\
为什么改了 files.exclude 还是看到文件?常见卡点
最常遇到的不是设置没生效,而是规则被更高优先级的配置顶掉了,或者语法写错了。
- 检查有没有启用
remote.SSH.enableDynamicForwarding或其他实验性功能,某些旧版 Remote-SSH 插件会干扰文件监听逻辑 -
"**/.*": true不会隐藏.gitignore——因为.开头的文件默认就受 VS Code 内置规则保护,需显式写成"**/.gitignore": true - 如果文件刚创建就立刻出现,可能是
files.watcherExclude没同步更新,它控制的是文件系统监听范围,和exclude是两套机制 - 用
Ctrl+P快速打开文件时,被 exclude 的文件仍然能搜到(这是设计行为),只有资源管理器和全局搜索(Ctrl+Shift+F)才遵守该规则
想彻底不让远程用户看到某些文件?那得换思路
files.exclude 是纯客户端 UI 层过滤,远程用户只要换个编辑器、或者直接 ls -a 就全看见了。真要限制访问,得动服务器层:
- 把敏感文件放在项目外(比如
/etc/myapp/config.yaml),再用符号链接或环境变量注入路径 - 用 Linux 文件权限控制:
chmod 600 .env && chown $USER:$USER .env,配合 VS Code 以非 root 用户连接 - 如果用的是多用户共享服务器,避免把
.vscode提交进 Git,防止别人 clone 后自动加载你的 exclude 规则
真正麻烦的永远不是怎么藏,而是藏完之后忘了自己藏了什么——比如某天调试发现某个配置文件“凭空消失”,翻半天才发现是三年前加在 workspace settings 里的 exclude 规则。











