默认情况下如何在IPython Notebook代码单元格中显示行号

khs*_*ing 29 python ipython ipython-notebook

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

我从IPython/Jupyter笔记本中的显示行号中了解到,我可以使用ctrl-M L来切换它,这很棒,但手动.为了在默认情况下包含行号,我需要在ipython_notebook_config.py文件中添加一些内容.除非我遗漏了某些内容,否则在文档中没有解释如何执行此操作.

Min*_*619 43

(对于Jupyter 4+)在最新的Jupyter版本中,他们记录了进行配置更改的位置.所以基本上,在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;
            }
        );
    }
);
Run Code Online (Sandbox Code Playgroud)

以上是用于同时为所有单元格类型设置行号.如果您这样做,代码,Markdown和Raw单元格都将获得行号.如果您想要代码单元格的行号,则有一种更简单的方法.选择一个代码单元格,打开Chrome/Firefox JavaScript控制台,键入以下行:

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

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


(老回答)

在最新版本的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;
            }
        );
    }
);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • @ fx-kirin,您好,我相信这不是Jupyter最新版本中的问题。只需按“ Shift + L”即可。这会切换所有单元格并保留设置。 (2认同)

Wil*_*man 22

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

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

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

如果由于任何不起作用的原因,您始终可以以相同的方式编辑custom.js文件site-packages/IPython/html/static/custom/.


Ste*_*ley 6

以上在 2018 年对我不起作用

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

"CodeCell": {
  "cm_config": {
  "lineNumbers": true
}
Run Code Online (Sandbox Code Playgroud)

在那里的对象内部。所以最终的对象看起来像:

{
  "CodeCell": {
    "cm_config": {
      "lineNumbers": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 嗨斯蒂芬。在当前版本的 Jupyter 中,您只需在单元格(在命令模式下)上按 Shift+L 即可切换行号并保留设置。不需要手动浏览配置文件:) (4认同)