vscode需协同配置.gitignore、settings.json中的files.exclude/search.exclude及python.analysis.exclude三类规则:.gitignore仅影响git提交和资源管理器折叠,files.exclude控制侧边栏显示,search.exclude决定全局搜索是否扫描,python.analysis.exclude则影响代码跳转与类型检查,三者缺一不可。

VSCode 本身不直接“设置忽略文件清单”,它依赖三类配置协同生效:Git 的 .gitignore、工作区的 settings.json(控制显示/搜索/分析)、以及 Python 扩展自身的 python.analysis.exclude。漏掉任意一类,都可能出现“文件还在侧边栏”“搜索仍命中”“代码跳转误入第三方库”等问题。
Git 忽略只管提交,不管 VSCode 显示
.gitignore 是 Git 的规则,VSCode 只是读取它并“顺便”用于文件资源管理器的折叠(前提是启用了 files.exclude 的自动同步)。但这个行为不可靠,尤其在 Windows 或未重启时容易失效。
- 必须写全路径模式:
/venv/比venv/更安全,前者只匹配项目根下的venv/目录;后者可能误匹配my_venv/ - 常见漏项:
__pycache__/、*.pyc、.pytest_cache/、.mypy_cache/—— 这些不写进.gitignore,Git 就会把它们当普通文件追踪 - 已提交过的文件(如历史遗留的
.vscode/)需手动清除缓存:git rm -r --cached .vscode,再 commit
settings.json 控制文件是否出现在资源管理器和搜索中
真正让 VSCode “看不见”某些目录的是 files.exclude 和 search.exclude。它们必须写在工作区 .vscode/settings.json 里(不是用户全局设置),否则团队协作时别人看不到效果。
-
"files.exclude"决定左侧文件树是否展开该目录;"search.exclude"决定Ctrl+Shift+F全局搜索是否扫描它 —— 两者规则写法一致,但作用域不同 - 通配符
**/表示递归匹配子目录,比如"**/fastsam": true会隐藏所有层级下的fastsam文件夹 - 注意斜杠结尾:
"**/__pycache__/": true正确;"**/__pycache__": true会同时匹配__pycache__目录和名为__pycache__的文件(极少有这种文件,但逻辑上存在)
Python 扩展的 analysis.exclude 影响代码智能提示
即使文件被 files.exclude 隐藏了,Python 扩展默认仍会分析所有 .py 文件。结果就是:跳转定义(F12)可能跳进 venv/ 里的包源码,或类型检查报一堆第三方库的警告。
- 必须显式配置
python.analysis.exclude数组,路径用字符串,不支持布尔值:["**/venv", "**/.venv", "examples"] - 该配置只对 Pylance / Microsoft Python 扩展生效;如果你用
pylsp或pyright,需查对应插件文档,规则位置和字段名不同 - 路径是相对于工作区根目录的,不能写绝对路径;
${workspaceFolder}在这里无效
为什么 .vscode/settings.json 里写了 python.pythonPath 却不生效
因为 Python 解释器路径和忽略规则无关,但它常和忽略配置放在一起,容易让人误以为“只要写了 settings.json 就全生效”。实际是:解释器路径变更后必须重启 VSCode 窗口(不是重载),否则 Python 扩展仍用旧环境加载分析器,导致 analysis.exclude 被忽略或部分失效。
- 验证是否生效:打开命令面板(
Ctrl+Shift+P),输入Python: Select Interpreter,看右下角状态栏显示的路径是否与settings.json中一致 - 如果使用
.env设置PYTHONPATH,记得在settings.json中声明:"python.envFile": "${workspaceFolder}/.vscode/.env" - 多个 Python 项目混用时,务必确认当前打开的是“文件夹”而非“单个文件”——只有文件夹模式才会读取
.vscode/settings.json
最易被忽略的是三类配置的生效边界:Git 忽略影响提交、files.exclude 影响 UI 展示、python.analysis.exclude 影响语言服务。它们互不替代,也无继承关系。改完任一配置,都建议关掉窗口重开一次,避免缓存导致行为不一致。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











