Вимкніть автоматично закриваючі дужки в ipython


81

Я залишаюся в курсі роботи з гілкою розробника ipython (адже ipython - це, в основному, найдивовижніша річ у історії). Зовсім недавно (до вчорашнього чудового випуску ipython 2.0) я помітив, що він почав автоматично закривати дужки, дужки, лапки тощо, коли я їх набираю. Це трапляється як в терміналі (нічого іншого, що я використовую в терміналі, це не робить), так і в сесіях ноутбуків, тому я припускаю, що це був навмисний вибір з боку розробників. Я можу поважати, що ця функція може сподобатися іншим людям, але це зводить мене з глузду .

Я не можу знайти жодного варіанту для цього у файлах конфігурації. Я навіть не можу погуглити за це, бо не знаю, як це називається. Єдине, що з’являється, - це різна особливість автоматичних дужок . Я насправді знайшов це запитання , але воно старе, і припускає, що поведінка, яку я бачу, не може відбутися.

Як я можу вимкнути цю функцію?

[Я в основному в будь-якому випадку просто використовую інтерфейс ноутбука, тому просто вимкнути його було б непогано, але я волів би вимкнути його як у блокнотах, так і в сеансах ipython на терміналі.]

Відповіді:


32

Відповідь @ minrk - це м’ясо та кістки виправлення, але вам потрібно буде обернути його в зворотний виклик ініціалізації, принаймні з IPython-3.1.0. У вашому 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;
  });
});

Дякую @Mike за ваш коментар щодо RequireJSзавантаження залежностей IPython та вказівника на кращу формулювальну версію IPython / Jupyter Installing Extensions .

Редагувати для Jupyter 4.0.x:

Поточна реалізація ноутбука IPython, Jupyter 4.0.0, оновила налаштування JS. Зараз він використовується ~/.jupyter/custom/custom.jsза замовчуванням, і вам потрібно буде замінити весь цей require(... events.on(...))фрагмент лише таким у глобальній області:

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

Подібним чином, якщо ви хочете використовувати jQuery для будь-чого, просто використовуйте jQueryглобальний напрямок. Наприклад, я люблю приховувати фіксований заголовок за замовчуванням, що дає мені ще 40 пікселів місця для мого коду, який я вважаю трохи ціннішим, ніж постійний огляд логотипу Jupyter:

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

Редагувати дляJupyter ≥ 4.0.6 (але <лабораторії Юпітера):

Якщо custom.jsнаведене вище рішення не працює, спробуйте додати до вашого ~/.jupyter/nbconfig/notebook.json:

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

1
Зауважте, що сьогодні $це визначено лише приблизно 2/3 часу, оскільки процес запуску змінився. Як я зазначив у цій відповіді , і як ви можете бачити з того, custom.jsщо сьогодні створює ipython, вам потрібно використовувати require.
Майк,

3
В Ipython / Jupyter 4.0 це для мене вже не працює. Хтось стикався з тією ж проблемою?
bjonen

Приховуючи заголовок-контейнер #, також приховується ім'я файлу (нічого страшного, просто скористайтеся "Файл"> "Перейменувати", щоб побачити / відредагувати ім'я) та маленьке повідомлення, яке повідомляє, коли воно було збережено автоматично (я думаю, це не так важливо ... ).
MD004

1
Ваші вказівки щодо Jupyter 4.0, здається, працюють і для Jupyter 5.0, я радий бачити.
nealmcb,

Я не отримав версію для 4.0 для роботи на 6.0.3, але є оновлений відповідь тут , який працював для мене: stackoverflow.com/questions/44216326 / ...
doublefelix

24

Поведінка ноутбука є результатом роботи плагіна CodeCirror autoCloseBrackets . Ви можете вимкнути це, відредагувавши (створіть за допомогою, ipython profile createякщо ви цього ще не зробили) ~/.ipython/profile_default/static/custom/custom.jsі додавши:

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

Що стосується терміналу, я не бачу поведінки в дужках, яку ви описуєте. Ви, можливо, визначили PYTHONSTARTUP? IPython виконує цей файл за замовчуванням, який ви можете відключити, додавши до ~/.ipython/profile_default/ipython_config.py:

c.InteractiveShellApp.exec_PYTHONSTARTUP = False

Це б навіть працювало в терміналі? Чи підтримує readline набір тексту )над наявним )?
asmeurer

2
Команда $ ipython profile createскаже, що вона створила .pyфайл. Не редагуйте цей файл. Натомість відредагуйте файл ~/.ipython/profile_default/static/custom/custom.js, як сказано у відповіді. Як хтось може ввести код із настирливими дужками, що автоматично закриваються?
7студ

5
Здається, це не працює в IPython 3.1.0 / Jupyter (я спробував видалити свій ~/.ipythonі почати з нуля). Будь-яка ідея, як це зробити в новіших версіях? Крім того, як щодо знищення ще більш набридливої ​​поведінки автозакриття цитат?
naught101

Відповідь chbrown вище дає новий спосіб зробити це.
Майк

1
Також спробував метод chbrown в IPython 4.0 / Jupyter без удачі; все ще отримую мої котирування автоматично закритими. Будь-яке оновлення до цього?
horatio1701d

12

Якщо ви хочете зробити це просто з python:

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

2
здається рішенням, яке має продовжувати працювати у всіх версіях
jupyter

2
Після запуску цього в комірці будь-якого блокнота jupyter оновіть сторінку (натисніть cmd+Rабо F5), щоб зробити її ефективною.
Луї Ян

11

Це те, що працює для мене в Jupyter 4.0.6:

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

в ~/.jupyter/custom/custom.js.

До речі, якщо ви додатково хочете вимкнути синтаксис, підсвічування відповідних дужок:

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

5

Наведені вище пропозиції не спрацювали для мене в Jupyter 4.3.0 з Jupyter Notebook 5.0.0

Я виявив, що мені потрібно створити файл ~/.jupyter/custom/custom.jsіз таким змістом:

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

Зверніть увагу, що каталог ~/.juypter/customне існував до того, як я це зробив.

Це було взято разом із пропозиціями у документації v5.0 , і для майбутніх читачів вони є останніми


8
Боже, чому відповіді на це питання порушуються з кожною новою версією Юпітера. Я просто хочу, щоб це назавжди відключили.
asmeurer

Це єдине рішення, яке працювало для мене в Jupyter 5.0
primer_cuervo

У мене це не спрацювало з jupyter-core (4.3.0), ноутбуком (5.0.0), але відповідь Сергія зробив!
Хіт Рафтері,

4

Для Jupyter Notebook 5.1 використовуйте те саме, що і для 4.2, тобто додайте такий фрагмент у ~ / .jupyter / custom / custom.js:

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

Це спрацювало для мене на 5.0.0, коли рішення Сема нічого не зробило. О Боже.
Heath Raftery

1
Жодне з них більше не працює для мене, але це рішення робить: stackoverflow.com/questions/44216326/…
Джим Гаррісон,

4

У блокноті Jupyter Lab ви можете вимкнути autoClosingBracketsплагін у меню налаштувань. Перейдіть до розділу Settings --> Advanced Settings Editorта додайте наступне User Overrides:

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

Знімок екрана зображення

Це працювало з JupyterLab 0.32.1 та jupyter_core 4.4.0


3

Я виявив, що про це не згадувалося в інших відповідях. У моєму випадку (OS X, Jupyter 4.2.0) custom.js знаходиться в ~ / anaconda / lib / python3.5 / site-Packages / notebook / static / custom / custom.js

Думаю, це може допомогти таким, як я.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.