2012-06-04 82 views
79

我想將已縮進的Python代碼/整個函數和類複製到IPython中。每次我試圖縮進被搞砸了,我得到以下錯誤消息:IPython的魔術%paste如何工作?

IndentationError: unindent does not match any outer indentation level (<ipython-input-23-354f8c8be51b>, line 12)

If you want to paste code into IPython, try the %paste and %cpaste magic functions.

+3

我知道,這是可能已經在stackoverflow上,但在3次搜索後沒有找到它,所以我添加了我自己的版本。 – Framester

回答

121

您無法直接複製到IPython的。這是步驟:要複製到IPython的到剪貼板

  • 輸入%paste到IPython的
    1. 複製線按回車鍵
    2. 利潤!
  • +39

    %粘貼需要Tkinter,所以如果你沒有另一個好的選擇是%cpaste – yekta

    +54

    你實際上可以直接將代碼複製到IPython:你可能必須先輸入'%autoindent'來禁用自動縮進。 – EOL

    +0

    謝謝EOL! +1爲你 – Framester

    32

    在臺階上澄清:

    • 首先,複製目標線到剪貼板。

    • 類型到IPython的提示:

      • 如果Tkinter的:進入%paste
      • 否則:進入%cpaste
    • 粘貼(Ctrl-V),然後回車。

    • 然後輸入--並按回車。

    例如:

    In [1]: %cpaste 
    Pasting code; enter '--' alone on the line to stop or use Ctrl-D. 
    :for l in "Hello World": 
    : print l, 
    :-- 
    H e l l o W o r l d 
    
    +0

    您不必Ctrl-V。只需輸入%paste並按回車即可。 – SeF

    2

    %paste需要Tkinter。如果你是在Ubuntu中,你可以通過

    sudo apt-get install python-tk 
    

    安裝它,然後重啓IPython中,並使用%paste從剪貼板粘貼。

    0

    其中一個有用的答案在評論中丟失了,所以想重申它,同時添加另一個有用的IPython魔術函數的參考。

    首先要重申@EOL說的,解決OP問題的一種方法是先關閉自動縮進,首先運行%autoindent並進行粘貼(當然,如果您使用的是%paste則不需要)。

    現在要在此處添加更多信息,IPython中另一個有用的模式是%doctest_mode,它允許您從文檔字符串複製粘貼示例和測試片段。這對執行交互式python會話輸出也很有用,您可以在文檔和在線論壇中找到該輸出,而不必先提取出提示字符串。

    13

    由於IPython的5你不需要任何魔法命令,只需將其粘貼

    ipython5

    感謝prompt_toolkitIPython現在支持:

    • 語法高亮如你輸入
    • 真正的多行編輯(up和d自己的方向鍵線之間)
    • 多線糊移動而不會破壞縮進或立即執行代碼
    • 更好的代碼補全的接口(我們計劃提高更多)選購鼠標的支持

    更多內容here

    要升級ipython到最新版本

    pip install ipython --upgrade 
    
    +0

    是否可以粘貼多行並在每行自動執行代碼? –

    +0

    是的,只需粘貼代碼並按下回車鍵。如果你想調試檢出%pdb或ipdb。 [示例](https://github.com/ipython/ipython/issues/9642) – Levon

    +0

    哇它的aweomse –

    0

    對於誰是Python 3的

    python-tk是爲Python 2

    爲了使Python的3 %paste工作Ubuntu用戶,安裝python3-tk包:

    sudo apt-get install python3-tk 
    
    相關問題