在ipython中禁用自动关闭括号

在ipython中禁用自动关闭括号,ipython,ipython-notebook,Ipython,Ipython Notebook,我一直关注ipython的开发分支(因为ipython几乎是有史以来最棒的东西)。最近(在昨天令人敬畏的iPython2.0发布之前),我注意到它已经开始在我键入括号、括号、引号等时自动关闭它们。它发生在终端(我在终端中使用的其他功能都没有)和笔记本会话中,所以我认为这是开发人员有意的选择。我可以尊重其他人可能喜欢这个功能,但它让我完全发疯 我在配置文件中找不到它的任何选项。我甚至不能用谷歌搜索它,因为我不知道它叫什么。唯一能想到的是它的不同特征。我确实发现了,但这已经过时了,这表明我所看到的行

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

我在配置文件中找不到它的任何选项。我甚至不能用谷歌搜索它,因为我不知道它叫什么。唯一能想到的是它的不同特征。我确实发现了,但这已经过时了,这表明我所看到的行为不会发生

如何关闭此功能


[我基本上只使用笔记本电脑界面,所以只要关闭它就可以了,但我更喜欢在笔记本电脑和终端的ipython会话中关闭它。]

笔记本电脑的行为是CodeMirror插件的结果。您可以通过编辑(使用
ipython profile create
创建它,如果您还没有创建)
~/.ipython/profile\u default/static/custom/custom.js
并添加:

if (IPython.CodeCell) {
  IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false;
}
至于终端,我看不到您描述的括号行为。您是否定义了PYTHONSTARTUP?默认情况下,IPython执行此文件,您可以通过添加到
~/.IPython/profile\u default/IPython\u 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
依赖项加载的评论,以及指向更好公式的指针

为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
global。例如,我喜欢在默认情况下隐藏fixed header,这为我的代码提供了另一个40px的空间,我发现这比一直看Jupyter徽标更有价值:

jQuery('#header-container').hide();
Jupyter编辑≥ 4.0.6
(但 如果上面的
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;

如果只想从python执行此操作,请执行以下操作:

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

上述建议在Jupyter 4.3.0和Jupyter Notebook 5.0.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
并不存在


这是从文档中的建议拼凑而成的,对于未来的读者来说,这些是Jupyter Notebook 5.1的

使用与4.2相同的东西,即将以下代码片段放入~/.Jupyter/custom/custom.js中:

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

我发现其他答案中没有提到这一点。在我的例子(OSX,Jupyter4.2.0)中,custom.js位于 ~/anaconda/lib/python3.5/site-packages/notebook/static/custom/custom.js


我想它可能会对像我这样的人有所帮助。

在Jupyter实验室笔记本中,您可以关闭设置菜单中的
自动关闭括号
插件。转到
设置-->高级设置编辑器
并在
用户覆盖
部分添加以下内容:

{
“codeCellConfig”:{
“自动关闭括号”:false
}
}
截图


这在JupyterLab 0.32.1和jupyter_core 4.4.0中起作用

它甚至可以在终端中工作吗?readline是否支持在现有的
上键入
?命令
$ipython profile create
将表明它创建了一个
.py
文件。不要编辑那个文件。而是编辑文件
~/.ipython/profile\u default/static/custom/custom.js
,如答案所示。任何人怎么能用那个讨厌的自动关闭括号键入代码?这在IPython 3.1.0/Jupyter中似乎不起作用(我尝试删除我的
~/.IPython
并从头开始)。你知道如何在新版本中实现吗?另外,破坏更令人讨厌的报价自动关闭行为如何?给出了实现这一点的新方法。在IPython 4.0/Jupyter中也尝试了chbrown的方法,但没有成功;我的报价仍然自动关闭。对此有任何更新吗?请注意,
$
现在只定义了大约2/3的时间,因为启动过程已更改。正如我在中所指出的,正如您可以从ipython现在创建的
custom.js
中看到的,您需要使用
require
。在ipython/Jupyter 4.0中,这对我不再适用。有人遇到过同样的问题吗?隐藏#头容器也会隐藏文件名(没什么大不了的,只需使用file>Rename查看/编辑名称)和自动保存时显示的小消息(我想这没那么重要…)。您对Jupyter 4.0的说明似乎也适用于Jupyter 5.0,我很高兴看到。我没有让4.0的版本在6.0.3上运行,但是这里有一个更新的答案对我有用:天啊,为什么这个问题的答案与Jupyter的每个新版本都不一致。我只想永远禁用它。这是在Jupyter对我有效的唯一解决方案