不知道你写代码的时候有没有这种经历。文件写了一大半,顶部一堆乱七八糟的import,有没用的、顺序乱掉的;Java实体类写完字段之后,还需要批量生成get、set方法。
很多刚从IDEA转过来的小伙伴,习惯性按Alt + Enter,点灯泡修复。但是在VS Code里面,有两类动作:普通Code Action和Source Action,很多人一直分不清。
先说普通的Code Action(💡小灯泡)。就是光标停在报错那一行,按Ctrl + .弹出来的修复菜单。它是局部的,跟着光标位置走。比如补单个缺失import,修复当前这一行的警告,提取局部变量。作用范围局限在光标附近一小段代码。

还有个小技巧也值得说下,扩展现在可以把某一个 Code Action 标记为 preferred(优先推荐修复),用来表明这是针对当前问题最合适的修复方案。
如果存在优先修复项,编辑器小灯泡图标上会多出蓝色小徽章标记。
优先修复项可以直接通过 Auto‑Fix 命令(Windows/Linux:Shift+Alt+.;Mac:Option+Command+.)一键自动执行修复
而Source Action是面向整个文件的批量动作。这就是坑最多的地方:它不会出现在小灯泡菜单里面! 哪怕你光标随便放在文件任意位置都可以执行,目标是对整个文档做批量处理。整理全部导入、修复本文件所有lint警告、批量生成实体类的getter‑setter,全部属于Source Action的地盘。
为了更加自动化这个对文件的操作,你可以增加如下配置
保存一瞬间自动整理导入、批量修复eslint问题,这也是LSP生态非常好用的能力。
// 再保存的时候执行source action
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.organizeImports": true,
}
很多新手根本不知道它的入口。它需要单独唤起:右键编辑器选择Source Actions…,或者命令面板搜索source action调起。
🧐横向对比 IDEA / Zed
IntelliJ IDEA(JetBrains)
IDEA这边没有把两者做严格拆分。不管是单行修复还是整个文件批量清理,全部收拢到Alt+Enter(意向动作Intention Action)。IDEA的Code Cleanup相当于强化版Source Action,甚至可以跨整个目录批量清理代码。
优点:入口统一,不用记两套命令;缺点:没有单独的保存动作配置,更多依靠检查配置文件。习惯IDEA的人刚到VS Code经常找不到“批量修复整个文件”在哪里,就是这个原因。
Zed编辑器
Zed完整支持LSP普通Code Action(闪电图标,快捷键cmd+.),单行修复没问题。但是Zed目前没有独立的Source Action入口。
也就是说语言服务器虽然返回了文件级的source类操作,编辑器层缺少专门UI和保存自动执行钩子。想实现保存自动整理导入就比较折腾,只能依靠外部格式化工具。这是Zed现阶段LSP上一块短板。速度很快,但高级文件级修复能力弱于VS Code。
💡写在最后
很多人吐槽VS Code原生不如IDEA智能,其实不是LSP能力不行,而是很多类似Source Action这种高级特性藏的太深,静静地躺在右键菜单里面等待大家发掘。