我希望 IPython 笔记本代码单元的默认显示包括行号。
我从 Showing line numbers in IPython/Jupyter Notebooks 学到,我可以使用 ctrl-M L 进行切换,这很好,但需要手动操作。如果想要默认包含行号,我需要在 ipython_notebook_config.py 文件中添加一些内容。除非我错过了什么,否则文档中没有关于如何这样做的说明。
我希望 IPython 笔记本代码单元的默认显示包括行号。
我从 Showing line numbers in IPython/Jupyter Notebooks 学到,我可以使用 ctrl-M L 进行切换,这很好,但需要手动操作。如果想要默认包含行号,我需要在 ipython_notebook_config.py 文件中添加一些内容。除非我错过了什么,否则文档中没有关于如何这样做的说明。
(适用于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;
}
);
}
);
以上是为了同时将行号设置为所有单元格类型。如果这样做,代码、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会创建一个json配置文件在.jupyter/nbconfig
中以存储它们。此方法来自文档的这个页面,所以阅读文档以获取您可以进行的更多配置更改。
(old answer)
在最新版本的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.6 )需要将中间的代码行更改为require("notebook/js/cell").Cell.options_default.cm_config.lineNumbers = true; 。旧的
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
文件,请发表评论。
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
文件。我发现需要在~/.jupyter/nbconfig/notebook.json
中添加以下内容:
"CodeCell": {
"cm_config": {
"lineNumbers": true
}
对象中原本存在的内容。因此,最终的对象将如下所示:
{
"CodeCell": {
"cm_config": {
"lineNumbers": true
}
}
}
{ "codeCellConfig": { "lineNumbers": true} }
- shivam13juna