web-dev-qa-db-fra.com

Désactiver les parenthèses à fermeture automatique dans ipython

Je reste à jour avec la branche de développement d'ipython (car ipython est à peu près la chose la plus impressionnante de tous les temps). Assez récemment (avant l'impressionnante version d'ipython 2.0 d'hier), j'ai remarqué qu'il a commencé à fermer automatiquement les parenthèses, les crochets, les guillemets, etc., au fur et à mesure que je les tape. Cela se produit à la fois dans le terminal [rien d'autre que j'utilise dans le terminal] et dans les sessions de notebook, donc je suppose que c'était un choix intentionnel de la part des développeurs. Je peux respecter que d'autres personnes puissent aimer cette fonctionnalité, mais cela me rend complètement fou .

Je ne trouve aucune option pour cela dans les fichiers de configuration. Je ne peux même pas google pour ça, car je ne sais pas comment ça s'appelle. La seule chose qui apparaît est la fonction différente de parenthèses automatiques . J'ai effectivement trouvé cette question , mais c'est vieux, et suggère que le comportement que je vois ne peut pas se produire.

Comment désactiver cette fonction?

[J'utilise surtout l'interface du bloc-notes de toute façon, donc il suffit de la désactiver, mais je préférerais la désactiver dans les blocs-notes et les sessions ipython sur le terminal.]

75
Mike

La réponse de @ minrk est la chair et les os du correctif, mais vous devrez l'encapsuler dans un rappel d'initialisation, au moins avec IPython-3.1.0. Dans votre 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;
  });
});

Merci @Mike pour votre commentaire sur le chargement des dépendances RequireJS d'IPython et le pointeur vers une meilleure formulation à IPython/Jupyter Installation d'extensions .

Modifier pour Jupyter 4.0.x:

L'implémentation actuelle du bloc-notes IPython, Jupyter 4.0.0, a remanié les personnalisations JS. Il utilise désormais ~/.jupyter/custom/custom.js Par défaut, et vous devrez remplacer l'intégralité de cet extrait require(... events.on(...)) par ce qui suit dans la portée globale:

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

De même, si vous souhaitez utiliser jQuery pour manipuler quoi que ce soit, utilisez simplement le jQuery global directement. Par exemple, j'aime masquer l'en-tête fixe par défaut, ce qui me donne encore 40px d'espace pour mon code, ce que je trouve un peu plus précieux que de regarder le logo Jupyter tout le temps:

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

Modifier pour Jupyter ≥ 4.0.6 (mais <Jupyter Lab):

Si la solution custom.js Ci-dessus ne fonctionne pas, essayez d'ajouter ce qui suit à votre ~/.jupyter/nbconfig/notebook.json:

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

Le comportement du bloc-notes est le résultat du plugin CodeMirror autoCloseBrackets . Vous pouvez désactiver cela en modifiant (créez-le avec ipython profile create si ce n'est déjà fait) ~/.ipython/profile_default/static/custom/custom.js et en ajoutant:

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

Quant au terminal, je ne vois pas le comportement entre parenthèses que vous décrivez. Avez-vous peut-être défini un PYTHONSTARTUP? IPython exécute ce fichier par défaut, que vous pouvez désactiver en ajoutant à ~/.ipython/profile_default/ipython_config.py:

c.InteractiveShellApp.exec_PYTHONSTARTUP = False
24
minrk

C'est ce qui fonctionne pour moi dans Jupyter 4.0.6:

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

dans ~/.jupyter/custom/custom.js.

BTW, si vous souhaitez en outre désactiver la mise en évidence de la syntaxe des parenthèses correspondantes:

codecell.CodeCell.options_default.cm_config.matchBrackets = false;
11
kkumer

Si vous voulez le faire uniquement à partir de python:

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

Les suggestions ci-dessus n'ont pas fonctionné pour moi dans Jupyter 4.3.0 avec Jupyter Notebook 5.0.0

J'ai trouvé que je devais créer un fichier appelé ~/.jupyter/custom/custom.js avec le contenu suivant:

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

Notez que le répertoire ~/.juypter/custom n'existait pas avant cela.

Cela a été piraté à partir de suggestions dans v5. docs, et pour les futurs lecteurs, ce sont les dernières

5
Sam Mason

Pour Jupyter Notebook 5.1, utilisez la même chose que pour 4.2, c'est-à-dire mettez l'extrait de code suivant dans ~/.jupyter/custom/custom.js:

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

Dans Jupyter Lab Notebook, vous pouvez désactiver le plugin autoClosingBrackets dans le menu des paramètres. Aller à Settings --> Advanced Settings Editor et ajoutez ce qui suit dans le User Overrides section:

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

Capture d'écran image

Cela a fonctionné avec JupyterLab 0.32.1 et jupyter_core 4.4.0

3
joelostblom

J'ai trouvé que cela n'était pas mentionné dans d'autres réponses. Dans mon cas (OS X, Jupyter 4.2.0), custom.js se trouve dans ~/anaconda/lib/python3.5/site-packages/notebook/static/custom/custom.js

Je pense que cela peut aider quelqu'un comme moi.

3
wuliang8910