在ipython中关闭自动关闭括号

时间:2014-04-03 16:41:28

标签: ipython ipython-notebook

我与ipython的开发分支保持同步(因为ipython几乎是有史以来最棒的东西)。最近(在昨天令人敬畏的ipython 2.0发布之前)我注意到它已经开始自动关闭括号,括号,引号等,因为我输入它们。它发生在两个终端[我在终端中使用的其他东西都没有]和笔记本会话,所以我认为这是开发人员的有意选择。我可以尊重其他人可能喜欢这个功能,但它驱使我完全疯了

我在配置文件中找不到任何选项。我甚至不能谷歌,因为我不知道它叫什么。唯一出现的是automatic parentheses的不同特征。我确实找到了this question,但那已经过去了,并且表明我所看到的行为不会发生。

如何关闭此功能?

[我大多只是使用笔记本界面,所以只需将其关闭就可以了,但我更愿意在终端的笔记本和ipython会话中关闭它。]

8 个答案:

答案 0 :(得分:30)

@ minrk的答案是修复的主要内容,但您需要将其包装在初始化回调中,至少使用IPython-3.1.0。在custom.js

require(['base/js/namespace', 'base/js/events'], function(IPython, events) {
  events.on('app_initialized.NotebookApp', function() {
    IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false;
  });
});

感谢@Mike就IPython的RequireJS依赖加载以及IPython/Jupyter Installing Extensions更好的表述指针发表评论。

编辑Jupyter 4.0.x

当前的IPython笔记本实现Jupyter 4.0.0改进了JS自定义。它现在默认使用~/.jupyter/custom/custom.js,您需要在全局范围内仅使用以下内容替换整个require(... events.on(...))代码段:

IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false;

同样,如果你想使用jQuery来操作任何东西,只需直接使用jQuery全局。例如,我喜欢默认隐藏固定的标题,这为我的代码提供了另外40px的空间,我发现它比查看Jupyter标识更有价值:

jQuery('#header-container').hide();

答案 1 :(得分:24)

笔记本行为是CodeMirror autoCloseBrackets插件的结果。您可以通过编辑将其关闭(如果您还没有ipython profile create创建~/.ipython/profile_default/static/custom/custom.js并添加:

if (IPython.CodeCell) {
  IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false;
}

至于终端,我没有看到你描述的括号行为。你是否定义了PYTHONSTARTUP? IPython默认执行此文件,您可以通过添加到~/.ipython/profile_default/ipython_config.py来禁用该文件:

c.InteractiveShellApp.exec_PYTHONSTARTUP = False

答案 2 :(得分:11)

这在Jupyter 4.0.6中对我有用:

require(['notebook/js/codecell'], function (codecell) {
  codecell.CodeCell.options_default.cm_config.autoCloseBrackets = false;
})
~/.jupyter/custom/custom.js中的

BTW,如果您还想关闭匹配括号的语法高亮显示:

codecell.CodeCell.options_default.cm_config.matchBrackets = false;

答案 3 :(得分:10)

如果你只想从python中做到这一点:

from notebook.services.config import ConfigManager
c = ConfigManager()
c.update('notebook', {"CodeCell": {"cm_config": {"autoCloseBrackets": False}}})

答案 4 :(得分:5)

上述建议对Jupyter笔记本5.0.0的Jupyter 4.3.0不起作用

我发现我需要创建一个名为~/.jupyter/custom/custom.js的文件,其中包含以下内容:

var cell = Jupyter.notebook.get_selected_cell();
var patch = {
  CodeCell: {
    cm_config: {
      autoCloseBrackets: false,
    }
  }
}
cell.config.update(patch);

请注意,在我执行此操作之前,目录~/.juypter/custom不存在。

这与v5.0文档中的建议一起被黑客攻击,对于未来的读者,这些是latest

答案 5 :(得分:4)

对于Jupyter Notebook 5.1使用与4.2相同的内容,即将以下代码段放入〜/ .jupyter / custom / custom.js:

require(['notebook/js/codecell'], function (codecell) {
  codecell.CodeCell.options_default.cm_config.autoCloseBrackets = false;
})

答案 6 :(得分:3)

我发现在其他答案中没有提及。就我而言(OS X,Jupyter 4.2.0),custom.js位于 〜/安纳康达/ LIB / python3.5 /站点包/笔记本/静态/定制/ custom.js

我认为这可能对像我这样的人有所帮助。

答案 7 :(得分:1)

在Jupyter Lab 笔记本中,您可以关闭设置菜单中的autoClosingBrackets插件。转到Settings --> Advanced Settings Editor并在User Overrides部分添加以下内容:

{
  "codeCellConfig": {
    "autoClosingBrackets": false
  }
}

截图 image

这适用于JupyterLab 0.32.1和jupyter_core 4.4.0