在ipython中关闭自动关闭括号

Mik*_*ike 76 ipython ipython-notebook

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

我在配置文件中找不到任何选项.我甚至不能谷歌,因为我不知道它叫什么.唯一出现的是自动括号的不同特征.我确实找到了这个问题,但那已经过时了,并且暗示我所看到的行为不会发生.

如何关闭此功能?

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

chb*_*own 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;
  });
});
Run Code Online (Sandbox Code Playgroud)

感谢@Mike关于IPython RequireJS依赖加载的评论以及指向IPython/Jupyter安装扩展的更好配方的指针.

编辑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;
Run Code Online (Sandbox Code Playgroud)

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

jQuery('#header-container').hide();
Run Code Online (Sandbox Code Playgroud)

  • 在Ipython/Jupyter 4.0中,这对我不起作用了.有人遇到过同样的问题吗? (3认同)

min*_*nrk 24

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

if (IPython.CodeCell) {
  IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false;
}
Run Code Online (Sandbox Code Playgroud)

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

c.InteractiveShellApp.exec_PYTHONSTARTUP = False
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不适用于IPython 3.1.0/Jupyter(我尝试删除我的`〜/ .ipython`并从头开始).知道如何在较新版本中做到这一点吗?另外,如何破坏更烦人的报价自动关闭行为? (5认同)
  • 命令`$ ipython profile create`会说它创建了一个`.py`文件.不要编辑该文件.而是编辑文件`〜/ .ipython/profile_default/static/custom/custom.js`,就像答案所说的那样.怎么有人用烦人的自动关闭括号键入代码? (2认同)

小智 11

这对我在Jupyter 4.0.6中有用:

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

~/.jupyter/custom/custom.js.

顺便说一句,如果您还想关闭匹配括号的语法高亮显示:

codecell.CodeCell.options_default.cm_config.matchBrackets = false;
Run Code Online (Sandbox Code Playgroud)


Sea*_*n D 11

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

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

  • 似乎应该在 jupyter 版本中继续工作的解决方案 (3认同)
  • 在任何 jupyter notebook 的单元格中运行此命令后,刷新页面(按“cmd+R”或“F5”)使其生效。 (2认同)

Sam*_*son 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);
Run Code Online (Sandbox Code Playgroud)

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

这是从v5.0文档中的建议一起入侵的,对于未来的读者来说,这些都是最新的

  • Jeez为什么这个问题的答案会与每个新版本的Jupyter一致.我只是希望永远禁用它. (7认同)

joe*_*lom 5

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

{
  "codeCellConfig": {
    "autoClosingBrackets": false
  }
}
Run Code Online (Sandbox Code Playgroud)

截屏 图片

这适用于 JupyterLab 0.32.1 和 jupyter_core 4.4.0


小智 2

我们可以从 jupyter 控制台做到这一点,尝试一下。

在此输入图像描述