默认情况下如何在IPython笔记本代码单元中显示行号

默认情况下如何在IPython笔记本代码单元中显示行号,python,ipython,ipython-notebook,Python,Ipython,Ipython Notebook,我希望IPython笔记本电脑代码单元格的默认显示包括行号 我从中了解到,我可以用ctrl-M L切换,这很好,但手动。为了在默认情况下包括行号,我需要在我的ipython_notebook_config.py文件中添加一些内容。除非我遗漏了什么,否则文档中没有解释如何做到这一点 在您的custom.js文件中(位置取决于您的操作系统)放置 IPython.Cell.options\u default.cm\u config.lineNumbers=true 如果找不到custom.js,您可以

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


我从中了解到,我可以用ctrl-M L切换,这很好,但手动。为了在默认情况下包括行号,我需要在我的ipython_notebook_config.py文件中添加一些内容。除非我遗漏了什么,否则文档中没有解释如何做到这一点

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

IPython.Cell.options\u default.cm\u config.lineNumbers=true

如果找不到custom.js,您可以搜索它,但通常它会在您的profile\u默认文件夹中。如果该文件不存在,请在
$(ipython locate profile)/static/custom/custom.js

如果出于任何原因,这不起作用,您可以始终以相同的方式编辑
站点包/IPython/html/static/custom/
中的
custom.js
文件。

(对于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;
            }
        );
    }
);
以上用于同时将行号设置为所有单元格类型。如果您这样做,代码、标记和原始单元格都将获得行号。如果您只希望代码单元格的行号,有一种更简单的方法。选择一个代码单元,打开Chrome/Firefox JavaScript控制台,键入以下行:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
    CodeCell:{
        cm_config:{lineNumbers:true}
    }
}
config.update(patch)
"CodeCell": {
  "cm_config": {
  "lineNumbers": true
}
然后重新加载页面。这些更改持续存在,因为Jupyter将在
.Jupyter/nbconfig
中创建一个json配置文件来存储它们。此方法来自文档的一部分,因此请阅读文档以了解您可以进行的更多配置更改


(旧答案)

在最新版本的IPython笔记本(v3.1.0)中,转到
~/.IPython//static/custom/custom.js
,并添加以下行:

定义([
“base/js/namespace”,
“base/js/events”
], 
功能(IPython,事件){
events.on(“app_initialized.NotebookApp”,
函数(){
IPython.Cell.options\u default.cm\u config.lineNumbers=true;
}
);
}
);
IPython.Cell.options\u default.cm\u config.lineNumbers=true行本身无法工作,因为它需要在尝试此操作之前加载IPython.Cell对象。单独添加此行将导致控制台中出现未定义的错误。您需要将其封装在事件处理程序中,如图所示

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

“中间的代码行必须更改为<代码>要求(“Boox/JS/cell”).Cel.OpthsS.DeFult.CMyCopy.LeNeNexBule=真;
用于最新版本的IPython/Jupyter(IPython 4.0.0,Jupyter 4.0.6)。旧的
IPython.Cell
对象也可以工作,但是您的web控制台将抛出一个弃用警告,因此您可以预期旧的行在将来的版本中不受支持

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

以上内容在2018年对我不起作用 我发现在
~/.jupyter/nbconfig/notebook.json中,我需要添加以下行:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
    CodeCell:{
        cm_config:{lineNumbers:true}
    }
}
config.update(patch)
"CodeCell": {
  "cm_config": {
  "lineNumbers": true
}
在那里的物体里面。所以最后一个对象看起来像:

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

很酷;作品为了让它发挥作用,我还学到了另一件事:至少对我来说,尽管默认的custom.js文件中有注释(“在profile/static/custom/custom.js中主要覆盖自定义用户javascript的占位符”),但该文件必须直接位于profile目录中(对我来说,~/.ipython/profile\u default/)。太棒了!我也学到了一些东西:D.如果你能接受答案,那就太好了,干杯。@WilliamDenman,这在新的Jupyter笔记本中已经不起作用了,你知道为什么或者更好,如何解决这个问题吗?谢谢,老实说,你的评论是我第一次听说朱比特。看起来真的很酷!不幸的是,我不再每天使用Python/iPython。已移动到.NET/C#/VB(用于工作)。所以我帮不了你。我建议,如果我的答案不起作用,发布一个新的SO问题。我相信更有知识的人能够回答它。@Shahar(和未来的读者),事实上,这在Jupyter笔记本上仍然有效,至少在3.1.0版。对于我使用v3.2.0版时,公认的答案不起作用,但它确实起作用。谢谢。@Mindstormer619,谢谢。这个解决方案是有效的,应该被认为是正确的答案。考虑到答案的顶部,最近的正确的方法:谢谢你的输入。Will do:DHi@fx kirin,我相信在最新版本的Jupyter中,这一切都不是问题。只需按Shift+L键
。这将在所有单元格中切换并保持设置。嗨,Stephen。在当前版本的Jupyter中,只需在单元格上按Shift+L(在命令模式下)即可切换行号并保持设置。不需要手动查看配置文件:)@Mindstormer619哈哈,谢谢!我一直在为Jupyter试用vim,对切换每个单元格的行号感到厌倦。。。我没有意识到