shift+m可合并连续选中的相邻单元格,需在命令模式下用shift+↑/↓多选后执行,仅保留首个单元格类型,不支持非连续或跨单元格合并。

合并两个相邻单元格的快捷操作
直接按 Shift + M 就能合并当前选中的单元格和它下方那个——前提是光标在命令模式(蓝色边框),且已选中上方那个单元格。这个操作只对两个**上下紧邻**的单元格生效,不是任意两个都能合。
常见错误现象:Shift + M 没反应,多半是因为光标还在编辑模式(绿色边框)里打字;或者只点了其中一个单元格但没用 Shift + ↓ 或鼠标拖选把两个都框进来。
- 必须先按
Esc退出编辑模式,确保单元格边框是蓝色 - 用
↑/↓键选中上方单元格,再按Shift + ↓选中下方那个 - 合并后,内容会拼在一起,换行符保留,但格式只继承第一个单元格的类型(比如上面是
Code,合并后整个就是代码单元格)
合并不相邻或多个单元格的限制
Jupyter Notebook 原生不支持跨跳合并,比如第1个和第5个单元格不能直接合并。试图用 Ctrl + A 全选再 Shift + M 看似可行,但实际只合并**连续选中的部分**,中间有跳过就会断开——它不是“全部粘成一个”,而是分段合并。
如果你真需要把分散的几个单元格内容聚到一起,得手动复制粘贴,或者导出为 .py 再处理。别指望 UI 上点几下就搞定非连续块。
-
Ctrl + A在 notebook 页面里选中的是所有单元格,但Shift + M仍只对当前连续选区生效 - 用鼠标多选时,必须按住
Shift并逐个点击,不能用框选(Jupyter 不支持矩形框选单元格) - 合并后如果发现格式错乱,大概率是原单元格类型混了(比如 Markdown + Code),合并只保留第一个的 type,后面的内容不会自动转义
合并后内容丢失或格式异常怎么办
最常踩的坑是:合并前没注意单元格类型。比如上方是 Markdown、下方是 Code,合并后整个变成 Markdown 单元格,里面所有 Python 代码就变成纯文本,运行不了。
解决方法很简单:合并前统一单元格类型。用 Y 切成代码,或 M 切成 Markdown,再操作。
- 合并前检查左上角状态栏显示的 cell type(
Code/Markdown/Raw) - 合并后如果代码不执行,先按
Y强制切回代码模式 - Markdown 里含代码块(```python)时,合并可能破坏缩进或语法高亮,建议合并后手动检查
想批量合并全部单元格?别信一键方案
网上有些脚本或插件号称“一键合并 notebook 全部 cell”,实际多数只是把所有 cell 内容拼起来写进一个新文件,不保留执行状态、输出、metadata(比如 widget 状态、kernel info),甚至可能丢掉图像或富文本渲染逻辑。
如果你真要交付一个“单 cell 版本”用于分享或提交,最稳的方式是:先用 Shift + M 从顶到底逐步合并(确保连续),再人工清理冗余空行和注释;而不是依赖 nbmerge 或 nbconvert 的“全量合并”参数。
-
nbmerge工具合并的是多个.ipynb文件,不是单个文件内的 cell -
jupyter nbconvert --to python导出的是可执行脚本,不是 notebook 格式,无法再在 Jupyter 里运行 - 真正需要保留 kernel 输出和交互元素时,合并 cell 本身就是反模式——Jupyter 的设计哲学就是分块执行,强行压平只会让调试和复现变困难











