Ctrl+Z仅撤销编辑器文本区的编辑动作,不响应命令、非编辑区、系统快捷键冲突、多光标分步修改等场景;最可靠重做是Ctrl+Shift+Z(Windows/Linux)或Cmd+Shift+Z(macOS),Ctrl+Y行为不稳定。

Ctrl+Z 撤销编辑,Ctrl+Shift+Z 重做最可靠;Ctrl+Y 行为不稳定,不建议依赖。
为什么 Ctrl+Z 有时没反应
VSCode 的 Ctrl+Z 只响应「编辑器文本区域」内的编辑动作——比如输入、删除、粘贴。它不撤销命令类操作(如 Format Document)、不作用于终端/搜索框/设置页等非编辑区。
- 光标不在代码编辑区时,
Ctrl+Z完全静默(不是报错,是根本没触发) - 刚执行了插件命令(如 Prettier 格式化),得靠插件自己提供的“撤消格式化”功能,
Ctrl+Z不管用 - 某些键盘布局(如 macOS 上外接 Windows 键盘)可能让
Ctrl+Z被系统截获,进File > Preferences > Keyboard Shortcuts搜undo看绑定是否被覆盖 - 多光标编辑下,
Ctrl+Z是逐个倒退每个光标的修改,不是整体回退——比如你用Ctrl+D选了 5 处变量名并批量改写,按一次Ctrl+Z只恢复最后一个光标处的修改
Ctrl+Y 和 Ctrl+Shift+Z 到底该用哪个
Ctrl+Y 在 VSCode 里名义上是重做,但实际行为更接近「重复上一次编辑动作」:连续按会不断插入相同内容,或在 Markdown/JSON 等语言模式下意外触发 editor.action.deleteLines(删行)。
- 真正与
Ctrl+Z严格配对、按撤销栈顺序恢复的,是Ctrl+Shift+Z(Windows/Linux)或Cmd+Shift+Z(macOS) - Mac 用户尤其注意:
Cmd+Y基本无效,系统级快捷键占用严重,VSCode 默认也不绑定它 - 如果你发现
Ctrl+Y行为异常(比如按一下删了一整行),进快捷键设置搜ctrl+y,把所有非redo的绑定删掉,再手动绑定到editor.action.redo
撤销历史跨保存但不跨重启
VSCode 的撤销栈默认跨 Ctrl+S 保留,哪怕你已经保存过文件,仍可 Ctrl+Z 回退到保存前的状态——前提是没关过这个文件或整个窗口。
- 撤销历史按工作区隔离,不同工作区之间不共享
- 关闭文件标签页后,该文件的撤销历史即清空;重启 VSCode 后全部清空
- 外部工具(如 Git CLI、脚本)直接修改文件并触发重载,当前撤销历史会丢失——长期修改必须靠
git,撤销只是临时救急 -
editor.undoRedoHistoryLimit配置控制内存中保留多少步,默认值足够日常使用,一般不用调
多光标和跨文件编辑时,撤销顺序取决于动作发生时间而非视觉位置;想整体回退,唯一办法是在批量操作前先按一次 Ctrl+Z 插入一个“断点”,否则只能一步步按回去。


















