48

我发现在 IPython notebook 中开发函数可以让我快速工作。当我对结果感到满意时,我会复制粘贴到文件中。自动缩进是 4 个空格,但我公司的缩进编码样式是 2 个空格。如何将自动缩进更改为 2 个空格?

4

7 回答 7

43

官方文档有一个回答这个特定问题的例子。这适用于 IPython 4。

摘要:将以下内容粘贴到浏览器的 javascript 控制台中

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

设置保持不变。您可以通过兑换回滚: 2: null

于 2016-01-27T21:13:59.020 回答
38

来自 CodeMirror 代码单元的官方文档:

  1. 打开一个 Ipython 笔记本
  2. 创建一个代码单元格,例如按b
  3. 打开浏览器的 JavaScript 控制台并运行以下命令

片段:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
      CodeCell:{
        cm_config:{indentUnit:2}
      }
    }
config.update(patch)
  1. 在浏览器中重新加载笔记本页面,例如按F5

这将永久修复它。我认为这仅适用于最新版本,但不确定!

于 2016-04-24T06:36:36.407 回答
21

AdamAL 的回答是正确的。它对我有用。

但是,它只会更改 Jupyter Notebook 中的缩进,而不影响 Jupyter 编辑器中的缩进。

更改缩进更直接的方法是直接编辑.jupyter/nbconfig目录中的 Jupyter 配置文件。该目录包含 2 个文件:

edit.json
notebook.json

您必须在任一选项中设置的选项是indentUnit。这是我的 Jupyter 配置文件的内容:

编辑.json:

{
  "Editor": {
    "codemirror_options": {
      "indentUnit": 2,
      "vimMode": false, 
      "keyMap": "default"
    }
  }
}

笔记本.json:

{
  "CodeCell": {
    "cm_config": {
      "indentUnit": 2
    }
  }
}

通过这种方法,我在 Jupyter Notebook 和 Jupyter Editor 中都将默认缩进设置为 2。

于 2016-02-25T09:51:58.400 回答
13

基于问题和此处找到的选项:
在您的 custom.js 文件中(位置取决于您的操作系统)放

IPython.Cell.options_default.cm_config.indentUnit = 2;

在我的机器上,文件位于~/.ipython/profile_default/static/custom

更新:

在 IPython 3 中,普通调用不再起作用,因此需要将设置放在适当的事件处理程序中。一个可能的解决方案可能看起来像

define([
    'base/js/namespace',
    'base/js/events'
    ],
    function(IPython, events) {
        events.on("app_initialized.NotebookApp",
            function () {
                IPython.Cell.options_default.cm_config.indentUnit = 2;
            }
        );
    }
);
于 2013-11-25T21:59:53.097 回答
12

如果您使用jupyterlab,似乎有一种更简单的方法:

1)点击jupyterlab菜单设置>高级设置编辑器

2)单击左侧窗格中的“笔记本”,确保您处于“原始视图”

3) 在右窗格的“用户覆盖”下,输入:

{
    "codeCellConfig": {
        "tabSize": 2
    }
}

如果您查看系统默认值,它将提示您什么是可覆盖的,您可以对其他设置重复此操作。

我在使用 Jupyterlab 的 Google Platform AI Notebook 上试过这个。

于 2019-07-29T05:35:26.450 回答
10

我相信现在最好将其包装在事件处理程序中,以便在每次笔记本加载时加载一次:

$([IPython.events]).on('app_initialized.NotebookApp', function(){
  IPython.CodeCell.options_default['cm_config']['indentUnit'] = 2;
});
于 2014-07-07T16:30:48.237 回答
2

除了添加

IPython.Cell.options_default.cm_config.indentUnit = 2;

按照 Jakob 的建议添加到您的custom.js文件中,请务必在重新启动 ipython 笔记本之前清除浏览器缓存!

此外,在添加文件之前,您可能必须先创建~/.config/ipython/profile_default/static/custom/目录(用于echo $(ipython locate default)查找默认目录)custom.js

于 2014-08-01T00:29:57.563 回答