关闭 ipython 中的自动关闭括号

我不断更新 ipython 的 dev 分支(因为 ipython 是有史以来最棒的东西)。最近(在昨天令人敬畏的 ipython 2.0发布之前) ,我注意到它已经开始自动关闭括号、括号、引号等,当我键入它们的时候。它发生在终端(我在终端中没有使用其他任何东西)和笔记本会话中,所以我认为这是开发人员有意为之的选择。我可以尊重其他人可能喜欢这个功能,但它驱动我 完全疯了

我在配置文件中找不到它的任何选项。我甚至不能谷歌一下,因为我不知道它叫什么。唯一出现的是 自动括号自动括号的不同特性。我确实找到了 这个问题,但那是很久以前的了,这表明我看到的行为不可能发生。

我怎样才能关闭这个功能?

[我大多数时候只是使用笔记本界面,所以在那里关闭它就可以了,但是我更喜欢在终端的笔记本和 ipython 会话中关闭它。]

13091 次浏览

笔记本行为是 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

@ 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/Jupiter 安装扩展更好公式的指针。

编辑 Jupyter 4.0.x:

当前的 IPython 笔记本实现 Jupiter 4.0.0改进了 JS 定制。它现在默认使用 ~/.jupyter/custom/custom.js,您需要将整个 require(... events.on(...))代码片段替换为全局作用域中的以下代码片段:

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

同样,如果您想使用 jQuery 来操作任何东西,只需直接使用 jQuery全局。例如,我喜欢在默认情况下隐藏固定的头部,这样我的代码就有了另外40px 的空间,我发现这比一直看 Jupyter 的 logo 更有价值:

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

编辑 Jupyter ≥ 4.0.6 (但是 < Jupiter Lab) :

如果上面的 custom.js解决方案不起作用,试着在你的 ~/.jupyter/nbconfig/notebook.json中加入以下内容:

{
"CodeCell": {
"cm_config": {
"autoCloseBrackets": false
}
}
}

这就是我在 Jupyter 4.0中的工作方式。6:

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

~/.jupyter/custom/custom.js

顺便说一句,如果你还想关掉匹配括号的语法高亮:

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

如果你只想从巨蟒开始:

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

上面的建议对于我在 Jupyter 的木星笔记本5.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文档中的建议中拼凑出来的,对于未来的读者来说,这些就是 最新的

对于 Jupiter Notebook 5.1,使用与4.2相同的方法,即将下面的代码段放入 ~/. Jupyter/custom.js:

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

我发现在其他的答案中没有提到它,在我的例子中(OS X,Jupiter 4.2.0) ,custom.js 位于 ~/anaconda/lib/python3.5/site-package/book/static/custom.js

我觉得这能帮助像我这样的人。

在 Jupiter yter实验室笔记本中,你可以在设置菜单中关闭 autoClosingBrackets插件。转到 Settings --> Advanced Settings Editor并在 User Overrides部分中添加以下内容:

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

截图 image

这适用于 Jupiter 实验室0.32.1和 jupyter _ core 4.4.0

我们可以在木星控制台上试试。

enter image description here