2014-04-03 66 views
65

我與ipython的dev分支保持同步(因爲ipython幾乎是有史以來最令人敬畏的事情)。相當近(在昨天的真棒ipython 2.0版本之前)我注意到,當我輸入它們時,它已經開始自動關閉括號,括號,引號等。它發生在兩個終端[沒有別的我在終端使用它]和筆記本會話,所以我認爲這是開發人員有意的選擇。我可以尊重其他人可能會喜歡這個功能,但它驅動我完全堅果關閉ipython中的自動關閉圓括號

我在配置文件中找不到任何選項。我甚至不能谷歌,因爲我不知道它叫什麼。唯一出現的是automatic parentheses的不同功能。我確實找到this question,但那已經很久了,並且表明我看到的行爲不會發生。

如何關閉此功能?

[我大多隻是用筆記本接口,無論如何,所以就關閉它會有罰款,但我更願意把它關掉兩個筆記本和IPython都在終端會話。]

+2

是的!多麼可怕的功能,以及幾個小時試圖關閉它的可怕浪費...... –

回答

27

@ 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你對IPython中的RequireJS依賴加載和指針更好地制定在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(); 
+1

請注意,'$'現在只定義了2/3的時間,因爲啓動過程已經改變。正如我在[這個答案](http://stackoverflow.com/a/29451242/1194883)中指出的那樣,正如你從'custom.js'中看到ipython現在創建的那樣,你需要使用'require'。 – Mike

+3

在Ipython/Jupyter 4.0中,這不適用於我。有人遇到同樣的問題? – bjonen

+0

隱藏#header-container也會隱藏文件的名稱(沒什麼大不了的,只需使用File> Rename來查看/編輯名稱)以及說明自動保存時間的小消息(我想這不是那麼重要.. )。 – MD004

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 
+0

它甚至可以在終端上工作嗎? readline是否支持在現有的')'上鍵入')'? – asmeurer

+2

命令'$ ipython profile create'會說它創建了一個'.py'文件。不要編輯該文件。相反,編輯文件'〜/ .ipython/profile_default/static/custom/custom.js',就像回答說的那樣。任何人都可以用煩人的自動關閉括號鍵入代碼? – 7stud

+5

這似乎不工作在IPython 3.1.0/Jupyter(我嘗試刪除我的'〜/ .ipython'並從頭開始)。任何想法如何在新版本中做到這一點?另外,如何摧毀更惱人的報價自動收盤行爲? – naught101

11

這是在Jupyter 4.0.6中對我有效:

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

in ~/.jupyter/custom/custom.js

順便說一句,如果你還想要關掉匹配括號的語法higlighting:如果你想要做的只是從蟒蛇

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

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

看起來像應該繼續在jupyter版本上工作的解決方案 – ansonw

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文檔,併爲未來的讀者,這些都是latest

+5

Jeez爲什麼這個問題的答案與每個Jupyter的新版本都有衝突。我只是想讓這個被永久禁用。 – asmeurer

+0

這是在Jupyter 5.0中爲我工作的唯一解決方案。 –

+0

這對jupyter-core(4.3.0),筆記本電腦(5.0.0)不適用,但謝爾蓋的答案是這樣的! –

2

對於Jupyter筆記本5.1使用同樣的事情爲4.2,即把下面的代碼片段到〜/ .jupyter /自定義/custom.js:

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

當Sam的解決方案什麼都沒做時,這對我有用5.0.0。噢親愛的。 –

1

我發現它沒有在其他答案中提到。在我的情況下(OS X,Jupyter 4.2.0),custom.js位於 〜/ anaconda/lib/python3.5/site-packages/notebook/static/custom/custom.js

我認爲它可能會幫助像我這樣的人。