在qtconsole
(通过ctrl-enter
)和笔记本中(通过单元格内的enter
),您可以将任何一行输入转换为多行输入。 为终端和控制台入口点提供类似的东西会很好。
目前,一种潜在的解决方法是使用if 1:
作为输入的第一行,然后在所有客户端中启动多行输入,但这似乎有点尴尬。
一般来说,在可能的情况下,我认为在不同的客户端之间实现功能对等是有意义的。
具体示例:我可以通过在每行末尾按ctrl-enter
使用 qtconsole 输入以下输入:
In [2]: print "hello"
...: print "this is all one input"
...: print "same here..."
...:
如果我执行该行,然后启动基于终端的 ipython 客户端并按向上箭头,我将看到适当的提示:
In [1]: print "hello"
print "this is all one input"
print "same here..."
可以执行和运行,但是没有办法像从终端那样输入自由格式的多行输入,这使得工作流程很尴尬。
感谢@michaelpacer引起我的注意。
我认为我们在这里遇到了终端/读取线的限制。 据我所知,没有简单的方法来检测 ctrl-enter。 我们只需调用raw_input()
并返回一个字符串 - 如果用户按下 Ctrl-D 或 Ctrl-C,则会引发异常。
作为一个长期项目,可以通过使用pyrepl之类的库而不是 readline 来做到这一点。 这是我们一直感兴趣的事情,但没有人有时间仔细研究它。 另一种方法是使用 curses 或类似的工具(如 urwid)构建一个新的前端。
您可以做的一件事是按 ctrl-v、ctrl-j 输入换行符而不运行输入。 我认为这是 Bash 本身的一部分,因为它也适用于终端(ctrl-v 表示将下一个热键视为控制序列,而 ctrl-j 是换行符)。 我没有机会在这方面与 iTerm2 混淆,但也许可以以某种方式将 ctrl-enter 映射到该双序列?
编辑:您确实可以至少在 iTerm2 中复制它。 可以转到您的全局快捷键并将 ctrl-enter 设置为“发送十六进制代码”然后:0x16 0x0a
现在是否有可能使用prompt_toolkit
获得这种类型的功能?
是的,虽然没有使用 enter 快捷方式 - 似乎我们可以用 enter 检测到的唯一 enter 组合是Alt-Enter
(或Esc, Enter
),我们已经在使用它来强制执行(即不要添加换行符)。 不过,我们可以使用另一个快捷方式来执行此操作 - 或者您可以添加自定义快捷方式。
在当前的 IPython 中,您可以执行此操作的一种方法是按 F2,这会将您放入编辑器,并在完成后将内容放入您的输入中。 您可以通过设置$EDITOR
环境变量来控制它打开的编辑器。
Windows 上的 Alt-Enter 将 ipython 窗口更改为全屏。
使用最新的 ipython 和 prompt_toolkit,如果你启用vi-mode
,你可以输入你的命令,然后按ESC
,然后按o
。 这将创建一个新行,就像在 vi 中一样。
通过这种方式,您可以拥有多行命令。
In [29] : %reset -s #----> press `ESC` then `o`
%run foo.py
参考
刚碰到这个。 我很肯定 ctrl-enter 用于创建新行!?! 但是这个问题表明我错了:(
另一种选择是将分号解释为行分隔符。 例如
%run slow_script.py; !display_notification.sh
将运行我的 python 脚本,然后执行一些 bash 脚本。
编辑:这实际上不起作用,这只是一个建议
我用 ;
cv2.imshow('图像', im) ;
cv2.waitKey(0) ;
cv2.destroyAllWindows()
按ctrl+o
对我有用(在 cmd 和 conemu 控制台中尝试过)。
也可以使用(
In [84]: (
...: fig, ax = plt.subplots(1,2)
...: ax[0].plot([1,2,3])
...: ax[1].plot([3,2,1])
...: fig.show()
...:
完成输入后,只需返回第一行并删除(
。
我用 ;
cv2.imshow('图像', im) ;
cv2.waitKey(0) ;
cv2.destroyAllWindows()
您似乎不能以这种方式混合 python 和魔法:
In [5]: %run test.py ;\
...: !echo foo
hi
按 ctrl+o 对我有用(在 cmd 和 conemu 控制台中尝试过)。
对我来说是alt+o
。
对我来说是 ctrl+o
Ctrl+o 对我有用ipython
,但不是jupyter console
。
Ctrl+O 有效,这个问题可以关闭
最有用的评论
按
ctrl+o
对我有用(在 cmd 和 conemu 控制台中尝试过)。也可以使用
(
完成输入后,只需返回第一行并删除
(
。