2014-04-03 2 views
65

Ich bleibe up-to-date mit dem ipython-dev-Zweig (denn ipython ist so ziemlich das genialste überhaupt). Ziemlich kürzlich (vor der großartigen ipython 2.0-Version von gestern) habe ich bemerkt, dass es damit begonnen hat, Klammern, Klammern, Zitate usw. automatisch zu schließen, während ich sie eintippe. Es passiert sowohl im Terminal [nichts, was ich im Terminal verwende, es tut] und Notebook-Sitzungen, also nehme ich an, dass es eine bewusste Entscheidung seitens der Entwickler war. Ich kann respektieren, dass andere Leute diese Funktion mag, aber es treibt mich komplett verrückt.Automatisch schließende Klammern in ipython deaktivieren

Ich finde keine Option dafür in den Konfigurationsdateien. Ich kann nicht einmal dafür googeln, weil ich nicht weiß, wie es heißt. Die einzige Sache, die kommt, ist die unterschiedliche Eigenschaft von automatic parentheses. Ich habe tatsächlich this question gefunden, aber das ist alt, und schlägt vor, dass das Verhalten, das ich sehe, nicht passieren kann.

Wie kann ich diese Funktion ausschalten?

[ich meist nur die ohnehin, Notebook-Schnittstelle verwenden, so dass es einfach ausschalten würde es in Ordnung sein, aber ich würde es vorziehen, es in beiden Notebooks und ipython Sitzungen am Terminal. Auszuschalten]

+2

Ja! Was für eine schreckliche Eigenschaft, und was für eine schreckliche Verschwendung von ein paar Stunden versucht, es auszuschalten ... –

Antwort

27

@ Antwort minrk das ist das Fleisch und Knochen des fix, aber Sie werden es in einer Initialisierung Rückruf wickeln müssen, zumindest mit IPython-3.1.0. In Ihrem 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; 
    }); 
}); 

Dank @ Mike für Ihre Kommentare über RequireJS Abhängigkeit Laden des IPython und der Zeiger auf eine bessere Formulierung bei IPython/Jupyter Installing Extensions.

Edit für Jupyter 4.0.x:

Die aktuelle IPython Notebook Implementierung Jupyter 4.0.0 überarbeitet JS Anpassungen. Es nutzt jetzt ~/.jupyter/custom/custom.js standardmäßig und Sie werden nachfolgend nur in globalen Bereich, dass die ganze require(... events.on(...)) Snippet ersetzen müssen:

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

Ebenso, wenn Sie jQuery verwenden möchten, etwas zu manipulieren, benutzen Sie einfach die jQuery global direkt. Zum Beispiel, wie ich den festen Header standardmäßig zu verstecken, die mir einen anderen 40px Platz für meinen Code gibt, die ich ein bisschen mehr wert als Blick auf die Jupyter Logo die ganze Zeit finden:

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

Beachten Sie, dass '$' heutzutage nur etwa 2/3 der Zeit definiert ist, da sich der Startvorgang geändert hat. Wie ich in [dieser Antwort] gezeigt habe (http://stackoverflow.com/a/29451242/1194883), und wie Sie aus der 'custom.js' sehen können, die Ipython heutzutage erstellt, müssen Sie' require' verwenden. – Mike

+3

In Ipython/Jupyter 4.0 funktioniert das nicht mehr für mich. Ist jemand auf dasselbe Problem gestoßen? – bjonen

+0

Versteckt den # Header-Container versteckt auch den Namen der Datei (keine große Sache, verwenden Sie einfach Datei> Umbenennen, um den Namen zu sehen/zu bearbeiten) und die kleine Nachricht, die sagt, wenn es automatisch gespeichert wurde (ich denke, es ist nicht so wichtig .. .). – MD004

24

Das Notebook Verhalten ist das Ergebnis des CodeMirror autoCloseBrackets Plugins. Sie können diese drehen und bearbeite (erstellen Sie es mit ipython profile create wenn Sie nicht bereits haben) aus ~/.ipython/profile_default/static/custom/custom.js und fügte hinzu:

if (IPython.CodeCell) { 
    IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false; 
} 

Wie für das Terminal, ich sehe nicht die Klammer Verhalten, das Sie beschreiben. Hast du vielleicht eine PYTHONSTARTUP definiert? IPython führt diese Datei standardmäßig, die Sie, indem zu ~/.ipython/profile_default/ipython_config.py deaktivieren:

c.InteractiveShellApp.exec_PYTHONSTARTUP = False 
+0

Würde es sogar im Terminal funktionieren? Unterstützt readline '' '' '' '' '? – asmeurer

+2

Der Befehl '$ ipython profile create' sagt, dass es eine' .py' Datei erstellt hat. Bearbeiten Sie diese Datei nicht. Bearbeiten Sie stattdessen die Datei '~/.ipython/profile_default/static/custom/custom.js', wie die Antwort sagt. Wie kann jemand Code mit diesen lästigen automatisch schließenden Klammern eingeben? – 7stud

+5

Das scheint in IPython 3.1.0/Jupyter nicht zu funktionieren (Ich habe versucht, mein '~/.ipython' zu löschen und von vorne anzufangen). Irgendeine Idee, wie man es in neueren Versionen macht? Wie wäre es mit der Zerstörung des noch ärgerlicheren Angebots? – naught101

11

Dies ist was funktioniert für mich in Jupyter 4.0.6:

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

in ~/.jupyter/custom/custom.js.

BTW, wenn Sie zusätzlich wollen die Syntax higlighting passender Klammern auszuschalten:

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

Wenn Sie es nur aus Python tun:

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

scheint die Lösung, die über Jupiter-Versionen weiter arbeiten sollte – ansonw

5

Die oben genannten Vorschläge nicht tat arbeitete für mich in Jupyter 4.3.0 mit Jupyter Notebook 5.0.0

Ich fand, dass ich eine Datei namens ~/.jupyter/custom/custom.js mit dem folgenden Inhalt erstellen musste:

var cell = Jupyter.notebook.get_selected_cell(); 
var patch = { 
    CodeCell: { 
    cm_config: { 
     autoCloseBrackets: false, 
    } 
    } 
} 
cell.config.update(patch); 

Beachten Sie, dass das Verzeichnis ~/.juypter/custom nicht existierte, bevor ich dies tat.

Dies wurde zusammen von Vorschlägen in v5.0 docs gehackt und für zukünftige Leser dies sind die latest

+5

Jeez warum brechen die Antworten auf diese Frage mit jeder neuen Version von Jupyter. Ich möchte nur, dass dies für immer deaktiviert ist. – asmeurer

+0

Dies ist die einzige Lösung, die für mich in Jupyter 5.0 funktionierte –

+0

Dies funktionierte nicht für mich mit jupyter-core (4.3.0), Notebook (5.0.0), aber Sergey's Antwort tat! –

2

Für Jupyter 5.1 Notebook das Gleiche wie für 4.2 verwenden, dh das folgende Snippet setzen in ~/.jupyter/custom /custom.js:

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

Das funktionierte für mich auf 5.0.0, als Sams Lösung nichts brachte. Ach je. –

1

Ich fand, dass es in anderen Antworten nicht erwähnt wurde. In meinem Fall (OS X, Jupyter 4.2.0) befindet sich custom.js in ~/anaconda/lib/python3.5/site-packages/notebook/statisch/custom/custom.js

Ich denke es kann jemandem wie mir helfen.