我希望我的IPython笔记本代码单元的默认显示包含行号。
我从Showing line numbers in IPython/Jupyter Notebooks了解到我可以用ctrl-M L切换它,这很棒但是手动。为了在默认情况下包含行号,我需要在ipython_notebook_config.py文件中添加一些内容。除非我遗漏了某些内容,否则在文档中没有解释如何执行此操作。
答案 0 :(得分:40)
(对于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和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)
然后重新加载页面。这些更改仍然存在,因为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,中间的代码行必须更改为 require("notebook/js/cell").Cell.options_default.cm_config.lineNumbers = true;
( IPython 4.0.0, Jupyter 4.0.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
文件,请发表评论。
答案 1 :(得分:21)
在您的custom.js
文件中(位置取决于您的操作系统)put
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/
文件。
答案 2 :(得分:3)
我发现在~/.jupyter/nbconfig/notebook.json
内我需要添加以添加以下行:
"CodeCell": {
"cm_config": {
"lineNumbers": true
}
在那里的物体里面。所以最终的对象看起来像:
{
"CodeCell": {
"cm_config": {
"lineNumbers": true
}
}
}