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