能恢复,但必须分清是删了单元格还是删了单元格里的代码:删单元格用Esc后按z撤销,删代码内容用Ctrl+z;运行过的代码可通过%history找回,未运行的则永久丢失。

能恢复,但必须分清是删了单元格还是删了单元格里的代码——两者的撤销方式完全不同,按错快捷键就彻底没救。
误删整个单元格(cell)怎么撤回
这是最常见也最容易救的情况:你按了 Delete 或 X,或者用鼠标点了垃圾桶图标,整个单元格消失了。
- 先按
Esc退出编辑模式(左侧边框变蓝,表示进入命令模式) - 再按
z(小写,不是Ctrl+z),立刻还原被删的单元格 - 这个操作支持多次连续撤销,比如删了 3 个,连按 3 次
z -
Ctrl+z在这里完全无效——它只管单元格内部的文本编辑,不管单元格结构 - 如果已经关闭了 notebook 页面,这个方法就失效了
单元格还在,但里面代码被清空或删了一半
这时候你还在绿色编辑模式里狂按 Backspace 或 Delete,Ctrl+z 就管用了,但有严格限制:
- 必须在同一个单元格内连续操作,切换过单元格后历史就断了
- 只对当前 session 有效,重启 kernel 后无法回溯
- 没运行过的代码,删了就真没了;运行过的代码,还能从历史里捞
代码运行过但单元格被删了,怎么找回原始内容
只要代码曾经成功执行过,Jupyter 就会记录在 In 历史中,哪怕单元格已不存在。
- 新建一个代码单元格,输入并运行:
%history,显示全部已执行命令 - 加参数更精准:
%history -n 1-20查第 1 到 20 条;%history -f backup.py导出到文件 - 等价写法:
for line in locals()['In']: print(line),效果一样但更底层 - 注意:未运行的草稿、中断报错的代码、魔法命令(如
%matplotlib inline)不会进In
撤销之后想重做(redo)怎么办
Jupyter 原生不支持 Ctrl+Shift+z 这类重做,但有替代路径:
- 命令模式下按
z是撤销删除,再按一次z不会“重做”,而是撤销上一步——也就是说,它本质是线性倒退,没有独立重做栈 - 如果误按
z多次,只能靠%history把代码复制回来,重新粘贴建单元格 - 菜单栏可点
Edit → Undo Delete Cell,和快捷键z等效,但多一层确认 - 真正危险的是:一旦刷新页面或 kernel 重启,所有未保存的撤销/重做状态全丢
最易被忽略的一点:Jupyter 的撤销能力完全依赖于 notebook 文件是否还开着、kernel 是否还活着。关掉浏览器标签页的瞬间,z 和 %history 都失效——前者因为命令模式中断,后者因为 session 内存清空。所以别等出事才想起 Ctrl+S。


















