web-dev-qa-db-fra.com

Comment changer l'espace d'indentation automatique en 2 dans le bloc-notes IPython

Je trouve que le développement de fonctions dans le cahier IPython me permet de travailler rapidement. Lorsque je suis satisfait des résultats, je fais un copier-coller dans un fichier. L'auto-indentation est de 4 espaces, mais le style de codage pour l'indentation dans mon entreprise est de 2 espaces. Comment changer l'auto-indentation en 2 espaces?

35
user2826610

Basé sur cette question et les options trouvées ici :
Dans votre fichier custom.js (l'emplacement dépend de votre système d'exploitation), mettez

IPython.Cell.options_default.cm_config.indentUnit = 2;

Sur ma machine, le fichier se trouve dans ~/.ipython/profile_default/static/custom

Mettre à jour:

Dans IPython 3, l'appel standard ne fonctionne plus, il est donc nécessaire de placer le paramètre dans un gestionnaire d'événements approprié. Une solution possible pourrait ressembler à

define([
    'base/js/namespace',
    'base/js/events'
    ],
    function(IPython, events) {
        events.on("app_initialized.NotebookApp",
            function () {
                IPython.Cell.options_default.cm_config.indentUnit = 2;
            }
        );
    }
);
12
Jakob

La documentation officielle a un exemple répondant à cette question spécifique . Cela a fonctionné pour moi avec IPython 4.

Résumé : collez ce qui suit dans la console javascript de votre navigateur

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
      CodeCell:{
        cm_config:{indentUnit:2}
      }
    }
config.update(patch)

Le réglage est conservé. Vous pouvez annuler en échangeant : 2 pour : null.

32
AdamAL

De la documentation officielle pour les cellules de code CodeMirror:

  1. Ouvrez un bloc-notes Ipython
  2. Créez un Code Cell par exemple en appuyant sur b
  3. Ouvrez la console JavaScript de votre navigateur et exécutez ce qui suit

fragment:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
      CodeCell:{
        cm_config:{indentUnit:2}
      }
    }
config.update(patch)
  1. Rechargez la page du bloc-notes dans le navigateur, par ex. en appuyant F5

Cela le réparera définitivement. Je suppose que cela ne fonctionne que sur les versions récentes, mais je n'en suis pas sûr!

25
Thoran

La réponse d'AdamAL est correcte. Ça a marché pour moi.

Cependant, il modifie uniquement l'indentation dans le bloc-notes Jupyter et ne modifie pas l'indentation dans l'éditeur Jupyter.

Un moyen plus direct de modifier l'indentation consiste à modifier directement les fichiers de configuration de Jupyter dans le .jupyter/nbconfig répertoire. Ce répertoire contient 2 fichiers:

edit.json
notebook.json

L'option que vous devez définir dans l'un ou l'autre est indentUnit. Voici le contenu de mes fichiers de configuration Jupyter:

edit.json:

{
  "Editor": {
    "codemirror_options": {
      "indentUnit": 2,
      "vimMode": false, 
      "keyMap": "default"
    }
  }
}

notebook.json:

{
  "CodeCell": {
    "cm_config": {
      "indentUnit": 2
    }
  }
}

Avec cette approche, j'ai défini l'indentation par défaut à 2 dans le bloc-notes Jupyter et l'éditeur Jupyter.

17
bpirvu

Je crois que c'est maintenant mieux enveloppé dans un gestionnaire d'événements à charger une fois par chargement de bloc-notes:

$([IPython.events]).on('app_initialized.NotebookApp', function(){
  IPython.CodeCell.options_default['cm_config']['indentUnit'] = 2;
});
10
Tim Dierks

Si vous utilisez jupyterlab, il semble y avoir un moyen plus simple:

1) Cliquez sur le menu jupyterlab Paramètres> Éditeur de paramètres avancés

2) Cliquez sur "Notebook" dans le volet gauche, assurez-vous que vous êtes sur "Raw View"

3) Dans le volet droit, sous "Remplacements d'utilisateurs", entrez ceci:

{
    "codeCellConfig": {
        "tabSize": 2
    }
}

Si vous regardez les valeurs par défaut du système, cela vous donnera un indice sur ce qui peut être remplacé et vous pouvez répéter cela pour d'autres paramètres.

J'ai essayé cela sur Google Platform AI Notebook qui utilise Jupyterlab.

4
kawingkelvin

En plus d'ajouter

IPython.Cell.options_default.cm_config.indentUnit = 2;

dans votre fichier custom.js comme suggéré par Jakob, assurez-vous également de vider le cache de votre navigateur avant de redémarrer le bloc-notes ipython!

En outre, vous devrez peut-être d'abord créer le répertoire ~/.config/ipython/profile_default/static/custom/ (Utilisez echo $(ipython locate default) pour trouver votre répertoire par défaut) avant d'ajouter le fichier custom.js.

2
Bobby