Ctrl+Y 默认不再绑定 redo,而是复制行或删除行;需通过快捷键编辑器检查并重绑,注意 when 条件限制和扩展冲突,推荐直接使用 Ctrl+Shift+Z 作为可靠重做快捷键。

Ctrl+Y 重绑为 redo 前先确认它当前绑定的是什么
VSCode 从 v1.80 起默认不再把 Ctrl+Y 绑定到 redo,而是映射为 editor.action.copyLinesDown(Windows/Linux)或在某些语言模式下触发 editor.action.deleteLines(比如 Markdown、JSON)。直接按 Ctrl+Y 想“重做”却删了一行,就是这个原因。
检查方式:按 Ctrl+K Ctrl+S 打开快捷键编辑器 → 在搜索框输入 ctrl+y → 看右侧“命令”列实际绑定的是哪个动作。如果显示的不是 redo,就该重绑了。
- 右键该条目 → 选择 Remove Keybinding(清掉旧绑定)
- 点击右上角
+号 → 输入命令名redo→ 按下Ctrl+Y→ 回车确认 - 若提示“已存在绑定”,说明还有别的命令占着
Ctrl+Y,需一并删掉再试
为什么改完还是不生效?重点看 when 条件和焦点位置
即使你成功把 Ctrl+Y 绑到了 redo,它也可能在某些场景下静默失效——这不是配置错了,而是 VSCode 的 when 上下文限制在起作用。
-
redo默认的when是textFocus && !editorReadonly,意味着光标必须落在可编辑的文本区域;切到终端、设置页、搜索框时,Ctrl+Y根本不会触发 - 多光标状态下,
redo行为不稳定,VSCode 不保证它能完整恢复所有光标操作,建议避免在此类场景依赖 - 如果用了 Vim 或 Emacs 插件,它们可能通过
when规则劫持了Ctrl+Y,需在快捷键编辑器里搜vim或emacs查看是否覆盖
不想动全局绑定?用 Ctrl+Shift+Z 更省事
对多数人来说,没必要非把 Ctrl+Y 改成 redo。VSCode 原生就提供严格配对的重做快捷键:Ctrl+Shift+Z(Windows/Linux)或 Cmd+Shift+Z(macOS),它始终绑定到 redo,不受语言模式或插件干扰。
- 这个组合键在所有版本中行为一致,无需修改配置
- 它和
Ctrl+Z共享同一撤销栈,顺序可靠,不会因格式化、保存等操作被截断 - 如果你只是偶尔需要重做,比改快捷键更安全;长期使用也容易形成肌肉记忆
重绑后仍出问题?优先排查扩展冲突而非重装
真正让 Ctrl+Y 行为飘忽的,往往不是 VSCode 本身,而是某个扩展悄悄接管了快捷键。比如 Prettier、ESLint、Auto Rename Tag 都可能注入自己的 when 规则。
- 临时禁用全部扩展:按
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools→ 切到 Console 标签,看按下Ctrl+Y时是否有报错或日志输出 - 逐个启用排查:在快捷键编辑器里搜
ctrl+y,点开每条记录看“来源”列,带扩展名的就是嫌疑对象 - 禁用后仍无效?检查
keybindings.json是否残留手动添加的错误规则——打开Preferences: Open Keyboard Shortcuts (JSON),删掉所有含"key": "ctrl+y"的对象,保存即可
Ctrl+Shift+Z 作为事实标准,把精力留给更值得优化的工作流。


















