最稳方案是eslint的import/order规则配合source.fixall.eslint保存时修复;prettier和organizeimports不支持字母序排序,必须设规则为"error"、启用修复开关、确保eslint-plugin-import本地安装且文件类型被validate覆盖。

JavaScript/TypeScript 用 ESLint 的 import/order 规则最稳
保存时自动排序 import,核心不是格式化,而是 ESLint 的修复能力。Prettier 和 VSCode 原生 organizeImports 只能删未用项、分组、加空行,不控制字母序;真要按字母升序排,必须靠 import/order 配合 source.fixAll.eslint。
常见错误是只配了规则但没开修复开关,或规则设成 "warn" 导致保存时不触发 fix。
- 确保项目本地装了
eslint-plugin-import(全局安装无效) - 在
.eslintrc.js或eslint.config.mjs中启用规则:"import/order": ["error", { "alphabetize": { "order": "asc", "caseInsensitive": true } }] - VSCode
settings.json必须包含:"editor.codeActionsOnSave": { "source.fixAll.eslint": true },不能只写source.organizeImports - 检查
eslint.validate是否包含当前文件类型,比如"typescriptreact"文件需显式列出,否则不生效
Python 用 isort + pyproject.toml 控制字母序
VSCode 的 Python 扩展默认不调 isort 排序,除非你明确指定它为格式化器。python.sortImports.args 已废弃,现在必须用 python.formatting.provider: "isort"。
isort 默认不强制字母序——它按 PEP 8 分组后,在每组内才做字母排序。想全局严格字母序,得关掉分组逻辑。
- 安装 isort 5.12+:
pip install isort - 项目根目录放
pyproject.toml,写入:[tool.isort]force_sort_within_sections = true+lines_after_imports = 2 - VSCode
settings.json中设置:"python.formatting.provider": "isort",并启用"editor.formatOnSave": true - 禁用所有其他格式化配置,如
python.formatting.blackArgs,否则 isort 会被绕过
别踩这些坑:VSCode 不排序的 4 个真实原因
配完不生效,90% 不是规则写错,而是链路断在环境或识别环节。
-
import/order规则放在overrides里但文件路径没匹配上,导致规则根本没加载 - TypeScript 项目没在
parserOptions.project指定tsconfig.json,路径解析失败,分组全乱,字母序也就无从谈起 - Python 文件右下角显示的是
Plain Text而非Python,VSCode 根本不走 Python 格式化流程 - ESLint 插件版本太老(import/order 的
alphabetize选项不被识别,静默忽略
临时救急:手动选中 import 行再排序
当自动方案卡住又急需整理,VSCode 原生 Sort Lines 可应急,但它只按字符串字面值排序,不理解 import 结构。
直接全选 import 块再 Ctrl+Shift+P → “Sort Lines” 会把 import React from 'react' 排在 import { useState } from 'react' 前面——因为前者以 i 开头,后者以 i 后的空格开头。结果不可靠。
- 先用正则替换统一格式:
import\s+{([^}]+)}\s+from\s+(['"])([^'"]+)\2→import { $1 } from '$3' - 再选中所有
from 'xxx'部分,单独排序路径,最后人工补回结构 - 这只是调试手段,上线项目必须走 ESLint 或 isort 自动链路,否则每次改代码都得手点一遍











