在ipython中关闭自动关闭括号


80

我使用ipython的dev分支保持最新(因为ipython是有史以来最强大的东西)。相当最近(在昨天很棒的ipython 2.0版本之前),我注意到它在键入时已经开始自动关闭括号,方括号,引号等。它在终端(我在终端上没有使用的其他任何东西)和笔记本会话中都发生,因此我认为这是开发人员的故意选择。我可以尊重其他人可能会喜欢此功能,但是它使我完全疯了

我在配置文件中找不到任何选项。我什至不能用谷歌搜索它,因为我不知道它叫什么。唯一出现的是自动括号的不同功能。我确实确实找到了这个问题,但是那是个老问题,并暗示我所看到的行为不可能发生。

如何关闭此功能?

[无论如何,我大多只是使用笔记本界面,所以只需要关闭它就可以了,但是我更喜欢在终端的笔记本和ipython会话中都将其关闭。]


7
是! 多么可怕的功能,以及试图关闭它几个小时的可怕浪费……
Heath Raftery

Answers:


32

@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对IPythonRequireJS依赖项加载的评论,以及在IPython / Jupyter Installation 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直接使用global。例如,我喜欢默认情况下隐藏固定的标头,这为我的代码提供了40px的空间,我发现它比一直看Jupyter徽标更有价值:

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

编辑为Jupyter ≥ 4.0.6(但<Jupyter Lab):

如果上述custom.js解决方案不起作用,请尝试将以下内容添加到您的~/.jupyter/nbconfig/notebook.json

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

1
请注意$,由于启动过程已更改,因此现在定义的时间仅为大约2/3。正如我在此答案中指出的那样,从custom.jsipython如今创建的中可以看出,您需要使用require
迈克

3
在Ipython / Jupyter 4.0中,这不再对我有效。有人遇到同样的问题吗?
bjonen 2015年

隐藏#header-container还会隐藏文件的名称(没什么大不了的,只需使用File> Rename即可查看/编辑名称)以及自动保存时的小消息(我想这并不重要... )。
MD004 '16

1
我很高兴看到您对Jupyter 4.0的说明似乎也适用于Jupyter 5.0。
nealmcb

我没有得到的版本4.0上下工夫6.0.3,但这里存在一个更新的答案,为我工作:stackoverflow.com/questions/44216326/...
doublefelix

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

它甚至可以在终端上运行吗?readline是否支持)在现有打字上打字)
asmeurer 2014年

2
该命令$ ipython profile create将说它创建了一个.py文件。不要编辑该文件。而是~/.ipython/profile_default/static/custom/custom.js按照答案说编辑文件。谁能键入带有烦人的自动结束括号的代码?
2015年

5
在IPython 3.1.0 / Jupyter中,这似乎不起作用(我尝试删除自己的内容~/.ipython并从头开始)。知道如何在较新的版本中执行此操作吗?另外,如何消除甚至更烦人的报价自动关闭行为呢?
naught101

上面chbrown的答案提供了一种新的方法。
迈克

1
还曾在IPython 4.0 / Jupyter中尝试过chbrown的方法,但是没有运气;仍然自动关闭我的报价。有任何更新吗?
horatio1701d

11

这是在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;

11

如果您只想从python进行操作:

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

1
似乎应该在所有jupyter版本上都可以使用的解决方案
ansonw

1
在任何Jupyter笔记本电脑的单元格中运行此命令后,刷新页面(按cmd+RF5)以使其生效。
路易·杨

5

在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此操作之前该目录不存在。

这是从v5.0文档中的建议中窃取的,对于将来的读者来说,这些是最新的


8
Jeez为什么对于这个新版本的Jupyter都无法解决这个问题。我只是想永远禁用它。
asmeurer '17

这是在Jupyter 5.0中对我有用的唯一解决方案
–primer_cuervo

对于jupyter-core(4.3.0),笔记本电脑(5.0.0),这对我不起作用,但是Sergey的答案确实有效!
Heath Raftery

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;
})

当Sam的解决方案没有执行任何操作时,这对我在5.0.0上有效。噢亲爱的。
Heath Raftery

1
无论这些工作对我来说了,但这种解决方案的作用:stackoverflow.com/questions/44216326/...
吉姆·加里森

4

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

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

屏幕截图 图片

这适用于JupyterLab 0.32.1和jupyter_core 4.4.0


3

我发现其他答案中没有提到它。就我而言(OS X,Jupyter 4.2.0),custom.js位于〜/ anaconda / lib / python3.5 / site-packages / notebook / static / custom / custom.js

我认为这可能会帮助像我这样的人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.