Как изменить автоотступ на 2 пробела в блокноте IPython

Я считаю, что разработка функций в блокноте IPython позволяет мне работать быстро. Когда я доволен результатами, я копирую и вставляю в файл. Автоотступ составляет 4 пробела, но стиль кодирования для отступа в моей компании составляет 2 пробела. Как изменить автоотступ на 2 пробела?


person user2826610    schedule 28.09.2013    source источник


Ответы (7)


На основе этого вопроса и найденных параметров здесь:
В вашем файле custom.js (расположение зависит от вашей ОС) поместите

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

На моей машине файл находится в ~/.ipython/profile_default/static/custom

Обновлять:

В IPython 3 простой вызов больше не работает, поэтому необходимо поместить настройку в соответствующий обработчик событий. Возможное решение может выглядеть так

define([
    'base/js/namespace',
    'base/js/events'
    ],
    function(IPython, events) {
        events.on("app_initialized.NotebookApp",
            function () {
                IPython.Cell.options_default.cm_config.indentUnit = 2;
            }
        );
    }
);
person Jakob    schedule 25.11.2013
comment
Этот подход сейчас явно не рекомендуется [1]: обратите внимание, что вы найдете в Интернете устаревшие расширения, которые не определяют load_ipython_extension и полагаются на события IPython и Custom.js. Пока это работает, но в будущем эти расширения перестанут работать и будут зависеть от условий гонки. [1]:carreau.gitbooks.io/jupyter-book/content/ - person AdamAL; 28.01.2016

В официальной документации есть пример ответа на этот конкретный вопрос. Это сработало для меня с IPython 4.

Резюме. Вставьте следующее в консоль javascript вашего браузера.

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

Настройка сохраняется. Вы можете откатиться заменив : 2 на : null.

person AdamAL    schedule 27.01.2016
comment
Да, я встречал такое, но это совершенно неприемлемо, если не возмутительно. Jupyter Notebook — единственный редактор, который я встречал в своей жизни, в котором нельзя задать собственное пространство TAB! Кроме того, это такая простая и распространенная просьба! - person Apostolos; 13.05.2019

Из официальной документации для ячеек кода CodeMirror:

  1. Откройте блокнот Ipython
  2. Создайте ячейку кода, например. нажав b
  3. Откройте консоль JavaScript вашего браузера и выполните следующее

фрагмент:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
      CodeCell:{
        cm_config:{indentUnit:2}
      }
    }
config.update(patch)
  1. Перезагрузите страницу блокнота в браузере, например. нажав F5

Это навсегда исправит проблему. Я предполагаю, что это работает только в последних версиях, но не уверен!

person Thoran    schedule 24.04.2016
comment
Эта процедура работает на моем Windows 10 Chrome. Версия ноутбука Jupyter: 4.2.3. Благодарю вас! - person jsung8; 01.07.2017
comment
также работает на MacOS 10.11.6 с блокнотом Jupyter 5.0.0 - person Micah Stubbs; 19.09.2017
comment
Я сделал вышеописанное, т.е. скопировал код в консоль браузера Firefox, он был принят, но также выдал ошибку: ReferenceError: Jupyter не определен! О, да ладно, это уже нестандартное решение. Тоже не работает! - person Apostolos; 13.05.2019
comment
@Apostolos, вам нужно открыть консоль на вкладке браузера, на которой отображается ваша записная книжка. Вы взаимодействуете с отображаемым сайтом. См. напр. developer.mozilla.org/en-US/docs/Tools/Web_Console - person Frank Haubenreisser; 01.11.2019
comment
Спасибо @Frank за запоздалый ответ. Вы говорите об обучении вождению. Однако вопрос очень конкретный: как отодвинуть сиденье автомобиля дальше назад. (Все это образно говоря, конечно.) Во всяком случае, с тех пор я решил проблему. - person Apostolos; 04.11.2019

Ответ AdamAL правильный. Это сработало для меня.

Однако он изменяет только отступ в блокноте Jupyter и не затрагивает отступ в редакторе Jupyter.

Более прямой способ изменить отступ — напрямую отредактировать файлы конфигурации Jupyter в каталоге .jupyter/nbconfig. Этот каталог содержит 2 файла:

edit.json
notebook.json

Параметр, который вы должны установить в любом из них, — indentUnit. Вот содержимое моих конфигурационных файлов Jupyter:

edit.json:

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

notebook.json:

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

При таком подходе я установил отступ по умолчанию равным 2 как в блокноте Jupyter, так и в редакторе Jupyter.

person bpirvu    schedule 25.02.2016
comment
Вышеупомянутые файлы конфигурации также работают для изменения отступа для использования символов табуляции. Используйте indentWithTabs: true в cm_config и codemirror_options. Другие предложения либо не были постоянными, либо не работали с Jupyter 4.1.1/iPython 5.1.0. - person iggie; 22.11.2016
comment
Добавление к этому ответу: * Каталог конфигурации можно найти с помощью jupyter --config_dir * Если каталог и nbconfig/ и файлы edit.json и notebook.json не существуют, вы можете создать их с содержимым, описанным bpirvu. - person Jan; 02.08.2017
comment
Опция indentWithTabs не должна быть установлена, как предлагает Игги, по крайней мере, не для кода Python. Это противоречит широко используемому соглашению и может привести к ошибкам отступов. PEP-8 также считает, что в python следует использовать пробелы. - person mit; 17.10.2018
comment
Это работает для всех типов ноутбуков, включая Node.js. +1 - person Christos Lytras; 01.10.2019
comment
Спасибо, что действительно показали, где находятся интересующие файлы! - person Marcin; 08.01.2020

Я считаю, что теперь это лучше всего завернуть в обработчик событий для загрузки один раз при загрузке ноутбука:

$([IPython.events]).on('app_initialized.NotebookApp', function(){
  IPython.CodeCell.options_default['cm_config']['indentUnit'] = 2;
});
person Tim Dierks    schedule 07.07.2014
comment
Несмотря на то, что я использую juypter, это сработало для меня (добавил строку внизу ~/.ipython/profile_default/static/custom/custom.js - person dranxo; 28.10.2015
comment
Я добавил это в ~/.jupyter/custom/custom.js (после создания каталога custom/) - person Matt; 09.03.2016

Если вы используете jupyterlab, есть более простой способ:

1) Щелкните меню jupyterlab «Настройки» > «Редактор расширенных настроек».

2) Нажмите «Блокнот» на левой панели, убедитесь, что вы находитесь в режиме «Необработанный вид».

3) На правой панели в разделе «Пользовательские переопределения» введите следующее:

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

Если вы посмотрите на системные настройки по умолчанию, это даст вам подсказку о том, что можно переопределить, и вы можете повторить это для других настроек.

Я попробовал это на ноутбуке Google Platform AI, который использует Jupyterlab.

person kawingkelvin    schedule 29.07.2019

Помимо добавления

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

к вашему файлу custom.js, как предложил Якоб, обязательно очистите кеш браузера перед перезапуском ноутбука ipython!

Кроме того, вам, возможно, придется сначала создать каталог ~/.config/ipython/profile_default/static/custom/ (используйте echo $(ipython locate default), чтобы найти каталог по умолчанию), прежде чем добавлять файл custom.js.

person Bobby    schedule 01.08.2014