IPython的神奇%粘贴是如何工作的?

Fra*_*ter 91 python 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.

Fra*_*ter 135

您无法直接复制到IPython.这是步骤:

  1. 将要复制的行复制到IPython中
  2. 进入%pasteIPython
  3. 按enter键
  4. 利润!

  • 您实际上可以直接将代码复制到IPython:您可能必须先输入'%autoindent`来禁用自动缩进. (60认同)
  • %paste需要Tkinter,所以如果你没有,那么另一个好赌注是%cpaste (47认同)
  • 在**`Ipython 5`**中,您只需粘贴代码即可.不再需要`%paste`了.阅读[answer](http://stackoverflow.com/a/38419584/2248627). (4认同)
  • 我知道这是一个非常古老的线程,但是“%autoindent”做到了这一点 (2认同)

小智 37

澄清步骤:

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

  • 输入iPython提示符:

    • 如果在Tkinter:输入 %paste
    • 否则:输入 %cpaste
  • 粘贴(Ctrl-V)并按Enter键.

  • 然后输入--并按Enter键.

例如:

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
Run Code Online (Sandbox Code Playgroud)

  • 您不必使用Ctrl-V.只输入%paste并按Enter键. (3认同)

Lev*_*von 21

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

ipython5

谢谢prompt_toolkit,IPython现在支持:

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

更多关于这里

升级ipython到最新版本

pip install ipython --upgrade 
Run Code Online (Sandbox Code Playgroud)

  • 我*认为*这取决于您进行粘贴的*环境*以及您*如何*进行粘贴?我的同事正在使用 Windows 10 的命令提示符通过 SSH 连接到我们的 Linux 主机,在 Docker 容器中打开 ipython,并尝试粘贴已经缩进的代码(通过*右键单击*),即使在 iPython 7.8.0 中,他也会获得额外的缩进。我理解命令提示符的右键单击行为的方式是,它实际上只是获取剪贴板中的任何内容并逐个字符地输出它,就像您正在键入它一样。所以 iPython 无法知道你实际上是在粘贴。 (2认同)

Chi*_*and 6

%paste 需要Tkinter.如果你在ubuntu,你可以安装它

sudo apt-get install python-tk
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Python3

sudo apt-get install python3-tk
Run Code Online (Sandbox Code Playgroud)

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