IPython的魔术粘贴如何工作?

我想复制已经缩进的Python代码/整个函数和类到IPython中。 每次我尝试缩进是搞砸了,我得到以下错误信息:

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.

您不能直接复制到IPython。 这是步骤:

  1. 将要复制到IPython的行复制到剪贴板中
  2. 在IPython中input%paste
  3. 按回车
  4. 利润!

澄清步骤:

  • 首先,将目标行复制到剪贴板中。

  • 键入iPython提示符:

    • 如果在Tkinter上:input%paste
    • 否则:input%cpaste
  • 粘贴(Ctrl-V)并回车。

  • 然后input--然后回车。

例如:

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

Ipython 5开始,你不需要任何魔法命令,只需粘贴即可

ipython5

感谢prompt_toolkitIPython现在支持:

  • 键入时突出显示语法
  • 真正的多行编辑(向上和向下箭头键在行之间移动)
  • 多行粘贴,无需缩进缩进或立即执行代码
  • 更好的代码完成界面(我们计划改进更多)可选鼠标支持

更多关于这里

ipython升级到最新版本

 pip install ipython --upgrade 

%paste需要Tkinter 。 如果你在Ubuntu的,你可以通过安装它

 sudo apt-get install python-tk 

然后重新启动ipython并使用%paste paste从剪贴板粘贴。

其中一个有用的答案在评论中丢失了,所以想重申一遍,同时添加另一个有用的IPython魔术函数的参考。

首先要重申一下@EOL说的,解决OP问题的一个办法就是先closures自动缩进,首先运行%autoindent并进行粘贴(当然,如果你使用%paste ,则不需要)。

现在要在这里添加更多信息,在IPython中另外一个有用的模式是%doctest_mode ,它允许您从文档string中复制粘贴示例和testing代码片段。 这对执行交互式python会话输出也很有用,您可以在文档和在线论坛中find这些输出,而不必先提取出提示string。

对于使用Python 3的ubuntu用户。

python-tk适用于Python 2。

为了让%paste在Python 3上工作,安装python3-tk包:

 sudo apt-get install python3-tk