【问题标题】:How to display line numbers in IPython Notebook code cell by default默认情况下如何在 IPython Notebook 代码单元中显示行号
【发布时间】:2013-12-10 10:31:50
【问题描述】:

我希望 IPython 笔记本代码单元格的默认显示包含行号。

我从Showing line numbers in IPython/Jupyter Notebooks 了解到,我可以使用 ctrl-M L 切换它,这很棒,但需要手动操作。为了默认包含行号,我需要在 ipython_notebook_config.py 文件中添加一些内容。除非我遗漏了什么,否则文档中没有说明如何执行此操作。

【问题讨论】:

  • 对于 2021 最新版本的用户,只需将其添加到您的高级 settings.json { "codeCellConfig": { "lineNumbers": true} }

标签: python ipython ipython-notebook


【解决方案1】:

在您的custom.js 文件中(位置取决于您的操作系统)放入

IPython.Cell.options_default.cm_config.lineNumbers = true;

如果您找不到 custom.js,您可以搜索它,但通常它会在您的 profile_default 文件夹中。如果不存在,在$(ipython locate profile)/static/custom/custom.js创建文件

如果由于某种原因不起作用,您可以随时以相同的方式编辑site-packages/IPython/html/static/custom/ 中的custom.js 文件。

【讨论】:

  • 非常酷;作品。我学到的另一件事是试图让它工作:至少对我来说,尽管默认 custom.js 文件中有注释(“自定义用户 javascript 的占位符主要在 profile/static/custom/custom.js 中被覆盖”),该文件必须直接位于配置文件目录中(对我来说,~/.ipython/profile_default/)。
  • 太棒了!我也学到了一些东西:D。如果您能接受答案,那就太好了,干杯。
  • @WilliamDenman,这在新的 Jupyter 笔记本中不再起作用,知道为什么或更好,如何解决这个问题?谢谢
  • 老实说,您的评论是我第一次听说 Jupyter。它看起来真的很酷!不幸的是,我不再每天使用 Python/iPython。已移至 .NET/C#/VB(用于工作)。所以我无法帮助你。我建议,如果我的回答不起作用,请发布一个新的 SO 问题。我相信有更多知识的人能够回答它。
  • @Shahar(以及未来的读者),这实际上仍然适用于 Jupyter notebook,至少 3.1.0。
【解决方案2】:

(对于 Jupyter 4+) 在最新的 Jupyter 版本中,他们有 documented 进行配置更改的地方。所以基本上,在 Jupyter 更新中,他们删除了配置文件的概念,因此 custom.js 文件位置现在是 .jupyter/custom/custom.js,具体取决于您的 .jupyter 文件夹的位置。因此,如果您没有custom 文件夹或custom.js 文件,只需创建它们,然后将这些行放入新创建的文件中:

define([
    'base/js/namespace',
    'base/js/events'
    ], 
    function(IPython, events) {
        events.on("app_initialized.NotebookApp", 
            function () {
                require("notebook/js/cell").Cell.options_default.cm_config.lineNumbers = true;
            }
        );
    }
);

以上内容用于同时将行号设置为所有单元格类型。如果您这样做,代码、Markdown 和原始单元格都将获得行号。如果您希望行号仅适用于代码单元,有一种更简单的方法。选择一个代码单元,打开 Chrome/Firefox JavaScript 控制台,输入以下行:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
    CodeCell:{
        cm_config:{lineNumbers:true}
    }
}
config.update(patch)

然后重新加载页面。这些更改仍然存在,因为 Jupyter 将在 .jupyter/nbconfig 中创建一个 json 配置文件来存储它们。此方法来自文档的this page,因此请阅读文档以了解您可以进行的更多配置更改。


(旧答案)

在最新版本的 IPython Notebook (v3.1.0) 中,转到~/.ipython/<profile_name>/static/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;
            }
        );
    }
);

IPython.Cell.options_default.cm_config.lineNumbers = true; 行单独不起作用,因为它需要在尝试此操作之前加载 IPython.Cell 对象。单独添加这一行将导致控制台中出现未定义的错误。如图所示,您需要将其封装在事件处理程序中。

@William-Denman 的代码可能适用于早期版本,但现在您需要这样做。

编辑:对于最新版本的 IPython/Jupyter(IPython 4.0.0、Jupyter 4.0),中间的代码行必须更改为 require("notebook/js/cell").Cell.options_default.cm_config.lineNumbers = true; .6)。旧的 IPython.Cell 对象也可以使用,但您的 Web 控制台会抛出一个弃用警告,因此您可以预期未来的版本将不支持旧行。

另外,在我使用WinPython portable 运行的最新IPython/Jupyter 中,我在配置文件文件夹中找不到custom.js 文件。我在WinPython-64bit-2.7.10.3\python-2.7.10.amd64\Lib\site-packages\notebook\static\custom 中找到了它(经过很多 搜索)。我不知道这是 WinPython 的事情还是 Jupyter 的事情。如果有人正常安装了 Jupyter(最新版本)(使用 pip 或其他)并且仍然可以在配置文件文件夹中找到 custom.js 文件,请发表评论。

【讨论】:

  • 对于使用 v3.2.0 的我来说,接受的答案不起作用,但确实如此。谢谢。
  • @Mindstormer619,谢谢。此解决方案有效,应视为正确答案。
  • 考虑将更新的正确方法移至答案的顶部:)
  • 感谢您的意见。会做的:D
  • 嗨@fx-kirin,我相信这整个事情在最新版本的Jupyter中都不是问题。只需点击Shift+L。这会在所有单元格中切换并保持设置。
【解决方案3】:

上述方法在 2018 年对我不起作用

我发现~/.jupyter/nbconfig/notebook.json里面需要添加以下几行:

"CodeCell": {
  "cm_config": {
  "lineNumbers": true
}

在那个物体里面。所以最终的对象看起来像:

{
  "CodeCell": {
    "cm_config": {
      "lineNumbers": true
    }
  }
}

【讨论】:

  • 嗨,斯蒂芬。在当前版本的 Jupyter 中,您只需在单元格上按 Shift+L(在命令模式下)即可切换行号并保持设置。不需要手动浏览配置文件:)
  • @Mindstormer619 哈哈,谢谢!我一直在为 Jupyter 尝试 vim,并且厌倦了为每个单元格切换行号......没有意识到将它们全部打开或关闭是那么容易。最终以我所说的结束,但你的方式更容易 =)
  • 我正在使用 jupyter-vim-binding,这个方法很简单,对我有用,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 2011-10-25
相关资源
最近更新 更多