Jupyter Notebook 默认不显示行号,但报错提示含行号,需手动开启:快捷键 Esc+L(当前单元格)或 Shift+L(全部单元格),菜单 View→Toggle Line Numbers 在新版中已移除;永久方案为配置 custom.js(仅 classic Notebook)或 VS Code 中设 "notebook.lineNumbers": "on"。

Jupyter Notebook 默认不显示行号,但报错信息里总带行号(比如 File "xxx.py", line 42),没行号就得手动数——这事真没必要。
快捷键切换当前单元格行号(最常用)
这是日常调试最顺手的方式,不用改配置、不重启、立刻生效:
- 先按
Esc进入命令模式(单元格左侧边框变蓝) - 按
L(小写 L,不是数字 1):只对当前单元格开启/关闭行号 - 新版 Jupyter(≥7.0)支持
Shift+L:一次性切换所有代码单元格的行号显示 - 如果按了没反应,检查是否还在编辑模式(光标在代码里闪),必须先
Esc
菜单栏 Toggle Line Numbers 失效或找不到?
部分新版 Jupyter(尤其是通过 conda 或 pip 升级后的版本)已移除菜单项,View → Toggle Line Numbers 不再出现。这不是你操作错,是 UI 调整了:
- 别找菜单,直接用
Esc+L(单单元格)或Shift+L(全页面) - 如果
Shift+L也不起作用,可能是键盘布局问题(比如 Caps Lock 开着导致实际输入大写 L) - 极少数情况是浏览器插件拦截了快捷键,可换 Chrome / Edge 试一下
永久启用所有 notebook 行号(custom.js 方案)
这个方案适用于长期开发、不想每次手动开的人,但要注意它只对 classic Notebook 生效(JupyterLab 不认 custom.js):
- 运行
jupyter --config-dir查看配置路径,进入该目录下的custom文件夹(没有就新建) - 新建或编辑
custom.js,内容必须严格如下(注意逗号、分号、括号):
define([
'base/js/namespace',
'base/js/events'
], function(IPython, events) {
events.on('app_initialized.NotebookApp', function() {
IPython.cell.options_default.cm_config.linenumbers = true;
});
});
- 保存后彻底关闭所有 Jupyter 进程(包括后台的
jupyter-notebook进程),再重新启动 - 如果改完没效果,检查控制台是否有 JS 报错(F12 → Console),常见原因是路径错、文件名拼错(必须是
custom.js,不是custom.js.txt)
VS Code 中的 Jupyter Notebook 行号设置
如果你用 VS Code 打开 .ipynb 文件,行号开关独立于 classic Notebook:
- 打开设置(
Ctrl+,或Cmd+,),搜索notebook.lineNumbers - 把选项设为
on,或者直接编辑settings.json,加这一行:
"notebook.lineNumbers": "on"
- 注意字段名是
notebook.lineNumbers(不是notebook.linenumbers,旧文档常写错) - 改完不用重启 VS Code,新打开的 notebook 就生效;已打开的 notebook 可能需要右键 → “Reload Window”
行号本身不耗性能,但 custom.js 方案容易被升级覆盖,VS Code 设置更稳定;而快捷键方案最轻量——记住 Esc + L 这两个键,比查文档快得多。


















