Ipython में ऑटो-क्लोजिंग कोष्ठकों को बंद करें


81

मैं ipython की देव शाखा के साथ अप-टू-डेट रहता हूं (क्योंकि ipython अब तक की सबसे भयानक चीज है)। बहुत हाल ही में (कल के भयानक आईपीथॉन 2.0 रिलीज से पहले) मैंने देखा कि यह टाइप करने के लिए कोष्ठक, कोष्ठक, उद्धरण, आदि को स्वचालित रूप से बंद कर दिया है। यह दोनों टर्मिनल में होता है [कुछ और नहीं जो मैं टर्मिनल में उपयोग करता हूं] और नोटबुक सत्र, इसलिए मुझे लगता है कि यह डेवलपर्स की ओर से एक जानबूझकर पसंद था। मैं यह सम्मान कर सकता हूं कि अन्य लोग इस सुविधा को पसंद कर सकते हैं, लेकिन यह मुझे पूरी तरह से पागल कर देता है

मुझे कॉन्फ़िगरेशन फ़ाइलों में इसके लिए कोई विकल्प नहीं मिल रहा है। मैं इसके लिए Google भी नहीं कर सकता, क्योंकि मुझे नहीं पता कि इसे क्या कहा जाता है। केवल एक चीज जो सामने आती है वह है स्वचालित कोष्ठक की अलग विशेषता । मुझे वास्तव में यह सवाल मिला , लेकिन यह पुराना है, और सुझाव देता है कि जो व्यवहार मैं देख रहा हूं वह नहीं हो सकता है।

मैं इस सुविधा को कैसे बंद कर सकता हूं?

[मैं ज्यादातर वैसे भी नोटबुक इंटरफ़ेस का उपयोग करता हूं, इसलिए इसे बंद करने से बस ठीक हो जाएगा, लेकिन मैं इसे टर्मिनल पर नोटबुक और आईपीथॉन दोनों सत्रों में बंद करना पसंद करूंगा।]

जवाबों:


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;
  });
});

IPython की RequireJSनिर्भरता लोडिंग और IPython / Jupyter Installing एक्सटेंशन में बेहतर सूत्रीकरण के सूचक के बारे में आपकी टिप्पणी के लिए धन्यवाद @ माइक ।

इसके लिए संपादित करें Jupyter 4.0.x:

वर्तमान IPython नोटबुक कार्यान्वयन, Jupyter 4.0.0, जेएस अनुकूलन को नया रूप दिया। यह अब ~/.jupyter/custom/custom.jsडिफ़ॉल्ट रूप से उपयोग करता है, और आपको require(... events.on(...))वैश्विक स्कोप में निम्नलिखित के साथ उस पूरे स्निपेट को बदलने की आवश्यकता होगी :

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

इसी तरह, अगर आप किसी भी चीज़ में हेरफेर करने के लिए jQuery का उपयोग करना चाहते हैं, तो jQueryसीधे ग्लोबल का उपयोग करें । उदाहरण के लिए, मैं तयशुदा हेडर को डिफ़ॉल्ट रूप से छिपाना पसंद करता हूं, जो मुझे अपने कोड के लिए एक और 40px का स्थान देता है, जो मुझे हर समय ज्यूपिटर के लोगो को देखने से थोड़ा अधिक मूल्यवान लगता है:

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

# हैडर-कंटेनर को छुपाना भी फ़ाइल का नाम छिपाता है (कोई बड़ी बात नहीं, बस फ़ाइल का उपयोग करें / नाम देखने / संपादित करने के लिए नाम बदलें) और छोटा संदेश जो कहता है कि जब यह ऑटोसवेड था (मुझे लगता है कि यह उतना महत्वपूर्ण नहीं है ... ) है।
एमडी 004

1
जुपिटर 4.0 के लिए आपके निर्देश, ज्यूपिटर 5.0 के लिए भी काम करते हैं, मुझे यह देखकर खुशी हुई।
nealmcb

मुझे 6.0.3 पर काम करने के लिए 4.0 के लिए संस्करण नहीं मिला, लेकिन यहां एक अद्यतन उत्तर दिया गया है जो मेरे लिए काम करता है: stackoverflow.com/questions/44216326/…
doublefelix

24

नोटबुक व्यवहार CodeMirror 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

क्या यह टर्मिनल में भी काम करेगा? क्या रीडलाइन )किसी मौजूदा पर टाइपिंग का समर्थन करती है )?
asmeurer

2
कमांड $ ipython profile createकहेगा कि इसने एक .pyफाइल बनाई । उस फ़ाइल को संपादित न करें। इसके बजाय फ़ाइल को संपादित करें ~/.ipython/profile_default/static/custom/custom.js, जैसे उत्तर कहता है। उस कष्टप्रद ऑटो समापन कोष्ठक के साथ कोई भी कैसे कोड टाइप कर सकता है?
7stud

5
यह IPython 3.1.0 / Jupyter में काम नहीं करने के लिए प्रतीत होता है (मैंने अपने को हटाने ~/.ipythonऔर खरोंच से शुरू करने की कोशिश की )। किसी भी विचार को नए संस्करणों में कैसे करना है? इसके अलावा, कैसे भी अधिक कष्टप्रद उद्धरण ऑटो-समापन व्यवहार को नष्ट करने के बारे में?
n

ऊपर chbrown का उत्तर ऐसा करने का नया तरीका देता है।
माइक

1
IPython 4.0 / Jupyter में बिना भाग्य के साथ chbrown की विधि की कोशिश की; अभी भी मेरे उद्धरण स्वतः बंद हो रहे हैं। इसका कोई अपडेट?
horatio1701d

12

यदि आप इसे सिर्फ अजगर से करना चाहते हैं:

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

2
ऐसा लगता है कि समाधान को जुपिटर संस्करणों में काम करते रहना चाहिए
ansonw

2
किसी भी ज्यूपिटर नोटबुक में एक सेल में इसे चलाने के बाद, इसे प्रभावी बनाने के लिए पृष्ठ (प्रेस cmd+Rया F5) को ताज़ा करें ।
लुई यांग

11

यह मेरे लिए जुपिटर 4.0.6 में काम करता है:

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

में ~/.jupyter/custom/custom.js

BTW, यदि आप अतिरिक्त रूप से मेल खाते हुए कोष्ठक के सिंटैक्स higlighting को बंद करना चाहते हैं:

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

5

उपरोक्त सुझावों ने मेरे लिए Jupyter 4.3.0 में Jupyter नोटबुक 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

यह एकमात्र उपाय है जो मेरे लिए जुपिटर 5.0 में काम किया है
प्राइमर_क्यूरो

यह मेरे लिए जुपिटर-कोर (4.3.0), नोटबुक (5.0.0) के साथ काम नहीं करता था, लेकिन सर्गेई का जवाब था!
हीथ राफ्टी

4

Jupyter नोटबुक 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 पर काम किया जब सैम के समाधान ने कुछ नहीं किया। हरे बाबा।
हीथ रेपरटी

1
मेरे लिए इनमें से कोई भी काम नहीं है, लेकिन यह समाधान करता है: stackoverflow.com/questions/44216326/…
जिम गैरीसन

4

जुपिटर लैब नोटबुक में आप 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 / साइट-पैकेज / नोटबुक / स्टैटिक / कस्टम / कस्टम में स्थित है।

मुझे लगता है कि यह मेरी तरह किसी की मदद कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.