【发布时间】:2014-12-21 19:07:05
【问题描述】:
我正在尝试编辑 %cpaste-ed 函数 - 但我找不到用于向上或向下移动一行的键盘快捷键。
附言我知道我可以使用 %edit, %run - 但如果需要进行的更改很小(其中粘贴到 %edit 不会自动删除 >>> 和 ... )
Further %ed 无法从块中读取粘贴的文本,即 %paste foo %edit foo 不起作用。
【问题讨论】:
我正在尝试编辑 %cpaste-ed 函数 - 但我找不到用于向上或向下移动一行的键盘快捷键。
附言我知道我可以使用 %edit, %run - 但如果需要进行的更改很小(其中粘贴到 %edit 不会自动删除 >>> 和 ... )
Further %ed 无法从块中读取粘贴的文本,即 %paste foo %edit foo 不起作用。
【问题讨论】:
简短的回答是“你不能”。对不起。
稍长一点的答案是“Cpaste 将读入并执行 预格式化 文本块。一旦进入,就无法编辑 - 你不是 vim 或 nano工作。
来自 iPython 文档:
从剪贴板粘贴并执行预先格式化的代码块。
您必须使用“-”(两个减号)或 Ctrl-D 终止块 一个人就行。你也可以为你自己的哨兵提供'%paste -s %%'('%%' 是此次操作的新哨兵)。
块在执行之前被删除以启用方法的执行 定义。行首的‘>’和‘+’字符是 忽略,以允许直接从电子邮件、差异文件和 doctests('...' 继续提示也被剥离)。这 执行的块也分配给名为“pasted_block”的变量 稍后使用“%edit paste_block”进行编辑。
您也可以将变量名作为参数传递,例如'%cpaste foo'。 这会将粘贴的块作为字符串分配给变量“foo”,没有 删除或执行它(前面的 >>> 和 + 仍然被剥离)
‘%cpaste -r’ 重新执行之前由 cpaste 输入的块。 '%cpaste -q' 禁止任何额外的输出消息。
实际上,我的工作流程很大程度上与the answer to this question 中的描述相同。我在 textwrangler 或 PyCharm 中编辑代码,并使用 %cpaste 在终端中运行它以进行早期调试。这是一个额外的步骤,但现在它似乎是不可避免的。您可能能够将 %capste 包装在 edit-syntax_error() 终端魔法中,但我还没有尝试过。
terminal magics 在那里完整列出。
【讨论】:
%edit,它将创建一个空的临时文件并在文本编辑器中打开它。您可以在其中粘贴代码并进行编辑。当你保存并退出时,IPython 会执行代码。
虽然编辑 %cpaste 不起作用,但您可以编辑模块并 reload 它。
In [1]: import mymodule
In [2]: mymodule.function()
Out[2]: 'result'
In [3]: reload(mymodule)
Out[3]: <module 'mymodule' from 'mymodule.py'>
In [4]: mymodule.function()
Out[4]: 'new result'
缺点是不能使用from mymodule import,因为reload 只接受一个模块作为参数。
【讨论】: