Jak zmienić autoindent na 2 miejsce w notebooku IPython

Uważam, że rozwijanie funkcji w notebooku IPython pozwala mi pracować szybko. Kiedy jestem zadowolony z wyników kopiuję-wklejam do pliku. Autoindent to 4 spacje, ale styl kodowania dla wcięcia w mojej firmie to 2 spacje. Jak zmienić autoindent na 2 spacje?

Author: user2826610, 2013-09-28

6 answers

Na podstawie tego pytania i opcji znalezionych tutaj:
W Twoim zwyczaju.plik js (lokalizacja zależy od systemu operacyjnego) put

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

Na moim komputerze plik znajduje się w ~/.ipython/profile_default/static/custom

Aktualizacja:

W IPython 3 zwykłe wywołanie już nie działa, dlatego wymagane jest umieszczenie ustawienia w odpowiedniej obsłudze zdarzenia. Możliwe rozwiązanie może wyglądać tak:

define([
    'base/js/namespace',
    'base/js/events'
    ],
    function(IPython, events) {
        events.on("app_initialized.NotebookApp",
            function () {
                IPython.Cell.options_default.cm_config.indentUnit = 2;
            }
        );
    }
);
 11
Author: Jakob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:34

Oficjalna dokumentacja zawiera przykład odpowiadający na to konkretne pytanie . To działało dla mnie z IPython 4.

Podsumowanie: wklej następujące elementy do konsoli javascript w przeglądarce

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

Ustawienie jest utrzymywane. Możesz cofnąć wymieniając : 2 na : null.

 21
Author: AdamAL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 21:13:59

Z oficjalnej dokumentacji komórek kodu CodeMirror:

    Otwórz Notatnik Ipython]}
  1. Utwórz komórkę kodu np. naciskając b
  2. Otwórz konsolę JavaScript w przeglądarce i uruchom następujące

Fragment:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
      CodeCell:{
        cm_config:{indentUnit:2}
      }
    }
config.update(patch)
  1. przeładuj stronę notatnika w przeglądarce np. naciskając F5

To naprawi go na stałe. zakładam, że działa to tylko na najnowszych wersjach, ale nie jestem pewien!

 13
Author: Thoran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-24 06:36:36

Wydaje mi się, że teraz najlepiej jest to zapakować w obsługę zdarzeń, aby załadować raz na każde obciążenie notebooka:

$([IPython.events]).on('app_initialized.NotebookApp', function(){
  IPython.CodeCell.options_default['cm_config']['indentUnit'] = 2;
});
 10
Author: Tim Dierks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-07 16:30:48

Odpowiedź Adamala jest prawidłowa. U mnie zadziałało.

Jednak tylko zmienia wcięcia w Notatniku Jupyter i pozostawia wcięcia w edytorze Jupyter bez zmian.

Bardziej bezpośrednim sposobem zmiany wcięć jest bezpośrednia edycja plików konfiguracyjnych Jupyter w katalogu .jupyter/nbconfig. Ten katalog zawiera 2 pliki:

edit.json
notebook.json

Opcja, którą musisz ustawić w jednej z nich to indentUnit. Oto zawartość mojej Jupyter config pliki:

Edycja.json:

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

Notatnik.json:

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

Dzięki temu podejściu ustawiłem domyślne wcięcia na 2 zarówno w Notatniku Jupyter, jak i w edytorze Jupyter.

 8
Author: bpirvu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 09:51:58

Oprócz dodawania

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

Do pliku custom.js zgodnie z sugestią Jakoba, pamiętaj, aby wyczyścić pamięć podręczną przeglądarki przed ponownym uruchomieniem notebooka ipython!

Być może będziesz musiał najpierw utworzyć katalog ~/.config/ipython/profile_default/static/custom/ (Użyj echo $(ipython locate default), aby znaleźć domyślny katalog) przed dodaniem pliku custom.js.

 2
Author: Bobby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-01 00:29:57