shift+l 是最常用、最快生效的行号切换快捷键,适用于 jupyter notebook 6.5+ 和 jupyterlab,全局生效且无需切换模式;菜单栏 view → toggle line numbers 为稳妥备选;永久启用需按环境配置 custom.js、vs code 设置或 jupyterlab 用户设置。

Jupyter Notebook 默认不显示行号,但报错信息里却总提示第几行出问题——数行数既慢又容易错。直接告诉你结论:Shift+L 是最常用、最快生效的方式,适用于绝大多数当前版本(包括 Jupyter Notebook 6.5+ 和 JupyterLab)。
按 Shift+L 切换所有单元格行号(推荐首选)
这个快捷键在较新版本中已统一为全局生效(不是只对当前 cell),按下即显示,再按一次关闭。
- 必须确保当前焦点在 notebook 页面内(不是输入框、不是浏览器地址栏)
- 不需要先进入命令模式;
Shift+L在编辑模式或命令模式下都有效 - 部分旧版(如 5.x)可能仍需先按
Esc进入命令模式再按L(小写),但那是历史行为,2024 年后主流安装基本都支持Shift+L - 如果无效,先检查是否被系统或输入法快捷键劫持(比如某些中文输入法会把
Shift+L当作切换键)
菜单栏点 View → Toggle Line Numbers(稳妥备选)
适合快捷键失灵、不确定键盘状态、或单纯想确认操作路径的场景。
- 路径固定,不受版本影响,所有 notebook 界面都存在该菜单项
- 效果与
Shift+L完全一致,只是多点两下鼠标 - 注意:不是
View → Show Line Numbers(旧版 UI 可能有歧义文案),而是明确叫Toggle Line Numbers
永久启用:改 custom.js 或用 notebook.lineNumbers 配置
如果你每次重启都要手动开,说明你真需要默认开启——但要注意不同运行环境配置位置和方式完全不同。
- Jupyter Notebook(非 Lab):编辑
~/.jupyter/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; }); }); - VS Code 中的 Jupyter 扩展:设置搜索
notebook.lineNumbers,设为"on"(注意是lineNumbers,不是linenumbers或line-number) - JupyterLab:不走
custom.js,改用户设置里的@jupyterlab/notebook:plugin→lineNumbers为true - 别碰
nbconfig或ipython_config.py——它们控制 kernel 行为,不影响前端显示
为什么有时行号显示了但报错行号对不上?
这不是显示问题,是代码执行逻辑导致的——尤其当你用了魔法命令、多行字符串、隐式续行或 cell 内部嵌套定义时。
-
%%time、%%capture等 cell magic 会把整个 cell 当作一个逻辑块,错误行号从 magic 命令后第一行开始计数 - 三引号字符串
"""..."""或括号换行,Python 解析器会合并为单行,但 notebook 渲染仍按物理行显示,造成视觉偏差 - cell 中包含
exec()或eval()动态执行代码时,错误行号指向的是被执行字符串内部的行,而非 notebook 当前 cell 的物理行 - 真正要定位,优先看 traceback 最末尾的
File "<ipython-input-xx>", line N</ipython-input-xx>,那个N是解释器实际执行时的行偏移,不是 notebook 左侧显示的行号
行号开关本身很简单,麻烦在于它只是表层辅助;真正卡住人的,往往是错误发生位置和显示位置之间的“语义断层”。动手前先确认你用的是哪个环境(原生 notebook / VS Code / JupyterLab),再决定用快捷键还是配配置——别在 VS Code 里去改 custom.js,也别在 JupyterLab 里找 Toggle Line Numbers 菜单。











