使用formatOnSave时如何让VSCode识别pyproject.toml中black的排除文件配置
根因说明
VSCode调用Black作为文件格式化器时,会将当前待格式化的单个文件的绝对路径直接作为参数传递给Black进程。而Black默认的exclude配置规则,仅作用于命令行传入的路径为目录时的递归扫描结果,对直接传入的单个文件路径不做匹配校验,因此会忽略pyproject.toml中的exclude配置直接执行格式化。而line-length这类全局格式化规则不受调用方式影响,所以可以正常识别。
解决方法
方法1:修改Black配置使用
force-exclude规则
Black 22.10.0及以上版本提供了优先级更高的force-exclude配置项,该规则对直接传入的单个文件也会生效,只需将你的pyproject.toml配置修改如下即可:[tool.black] force-exclude = 'foo.py' # 原有其他配置保留,比如 line-length 等修改后命令行调用和VSCode保存触发的格式化都会遵循该排除规则。
方法2:给VSCode的Black插件添加调用参数
如果你不想修改Black全局配置,也可以在VSCode设置中单独给Black添加运行参数:- 打开VSCode设置(快捷键
Ctrl+,/Cmd+,),搜索Black Formatter: Args - 添加配置项:
--force-exclude=foo.py
也可以直接编辑.vscode/settings.json文件添加以下内容:
"python.formatting.blackArgs": ["--force-exclude", "foo.py"]- 打开VSCode设置(快捷键
方法3:直接在VSCode中配置保存时忽略对应文件
如果你不需要Black以外的格式化器处理该文件,可以直接配置VSCode保存时不对该文件触发格式化:
在.vscode/settings.json中添加:"editor.formatOnSaveExclude": { "**/foo.py": true }该配置优先级最高,保存foo.py时不会触发任何格式化操作。
内容的提问来源于stack exchange,提问作者frankundfrei
相关产品推荐
相关产品推荐

