Ctrl+U是唯一跨文件回退光标位置的原生快捷键,仅记录F12、Ctrl+Click、Ctrl+F回车等显式跳转落点,不记录鼠标点击或方向键移动,且仅限当前窗口有效。

Ctrl+U 是唯一能跨文件回退光标位置的原生快捷键
它不看文件边界,只认「显式跳转动作」产生的落点:F12 跳定义、Ctrl+Click、Ctrl+F 后按回车选中、Go to Symbol 选中跳转——这些都会进栈。但鼠标点击、方向键移动、滚动条拖拽、Ctrl+G 跳行号,全都不记录。
Windows/Linux 用 Ctrl+U,macOS 用 Cmd+U。按了没反应?不是快捷键失效,而是你最近一次光标位移根本没触发记录条件。
- 窗口重启后历史清空,
Ctrl+U就失效了 - 它不跨窗口保留状态,只在当前 VSCode 实例内有效
- 即使你从
utils.ts跳到main.js再跳到types.d.ts,Ctrl+U也能一步退回前一个落点
Alt+←(Win/Linux)或 Ctrl+-(macOS)不是为“编辑位置”设计的
这个快捷键绑定的是 workbench.action.navigateBack,它走的是语义化跳转路径栈,不是编辑历史。比如 A.ts → B.ts → C.ts 连跳三次,按一次 Alt+← 只回 B.ts,再按一次才到 A.ts。
它完全不管你在哪改过代码,只管你“从哪跳过来”。所以如果你只是打开几个文件、滚动阅读、查文档,没做任何 F12/Ctrl+Click 类跳转,Alt+← 栈就是空的,必然没反应。
- 焦点不在编辑器里(比如当前在终端或搜索框),
Alt+←直接被忽略 - macOS 上别用
Cmd+←,容易被系统 Mission Control 拦截;Ctrl+-更稳 -
editor.gotoLocation.multipleDefinitions设为"goto"才能让大纲视图点击入栈
Last Edit Location 命令是唯一真·盯住“敲字位置”的兜底方案
命令名是 editor.action.lastEditAt,没有默认快捷键,必须通过 Ctrl+Shift+P → 输入 Last Edit Location → 回车调用。它只记最后一次插入、删除或粘贴时的光标位置,和跳转无关,也不依赖语言服务或保存状态。
- 适合场景:刚写完几行就切去查文档,回来秒回光标处
- 中间执行过格式化、重命名、自动补全,这个“最后”就会被覆盖
- 它可能跳到另一个 tab 的文件里,不是锁定在当前文件
-
keybindings.json中无法稳定绑定该命令为快捷键,官方已明确不支持
Timeline 面板救的是内容,不是光标
当你删错代码又关过窗口,Ctrl+U 和 Alt+← 都失效时,Timeline 是唯一能恢复内容快照的途径——但它不会把光标送回去。它靠磁盘快照工作,只对“曾在当前工作区打开过的文件”生效。
- 快照触发条件是:编辑停顿约 2 秒、切换编辑器焦点、手动保存 —— 不是定时存
- 点
Restore会直接覆盖当前编辑器内容,且不可撤回 - 提示
Cannot restore — file has unsaved changes时,得先Ctrl+S或用File → Revert File - 优先选带
Saved标签的节点,比Modified更可靠


















