66

如果在 iPython 或任何多行命令中引入 for 循环,我该如何返回并添加行?我跑了这个:

for row in table.find_all('tr'):
    cells = row.find_all('td')
    for c,cell in enumerate(cells):
        print c,":",cell.get_text().strip()
    try:
        this = cells[0]
        that = cells[1]
        the_docket = cells[2]
        other_thign = cells[3]
        jumble = re.sub('\s+',' ',str(cells[5])).strip()            
    except:
        "Nope"

并意识到我需要在其中添加一行,但我不能只在运行命令的 iPython、b/c 中点击“输入”。那么我可以在 iPython 中编辑该多行命令吗?

4

8 回答 8

83

受这个问题困扰一段时间了。我刚刚发现,当使用Ctrl-qCtrl-j(那是小写的 Q,J,无需按住shift键)时,会在现有的 IPython 编辑会话中添加换行符。

for li in some_list: print(li)    

在冒号后移动光标并按下Ctrl-qCtrl-j

for li in some_list:
print(li)

IPython:5.2.1,iTerm2:3.0.15,macOS:10.12.6

于 2017-09-05T17:49:25.493 回答
60

iPython 中的%edit神奇功能让您可以在自己喜欢的编辑器中编辑代码,然后像直接键入一样执行它。您还可以编辑已输入 repl 的代码,因为它存储在一个特殊变量中,例如:

In [1]: def foo(x):
   ...:     print x
   ...:     
In [2]: %edit _i1
于 2012-11-23T22:35:48.217 回答
54

还有一种方法可以直接在repl中添加换行符:ctrl-v、ctrl-j

ctrl-v 基本上可以让您发送控制代码,然后 ctrl-j 是换行符(换行符)的代码。打字有点尴尬,但它的优点是也可以在常规 Python shell 以及 Bash 本身中工作。

编辑:至少在 iTerm2 中,您也可以将其分配给单个热键。我将 ctrl-enter 设置为 0x16 0x0a 的“发送十六进制代码”。也可以使用 cmd-enter 或其他任何东西。

于 2013-09-30T18:52:30.033 回答
34

您可以使用ctrl+on(即按住控制按钮并输入字符'o'、'n')。您也可以分两步完成 -ctrl+o ctrl+n但我发现前者更容易。

  • ctrl-o- 进入多行模式
  • ctrl-n- 访问命令历史。但由于没有前进历史,光标只是移动到下一行。

我在运行 git bash 2.18.0 + windows 7 的机器上验证了它可以与 IPython 5.3.0 和 IPython 7.3.0 一起使用。

于 2019-02-27T20:15:07.543 回答
6

为了完整性:较新的 IPython 版本(0.11+)有一个非常漂亮的图形控制台,它允许您使用箭头导航您的代码,甚至可以使用鼠标重新定位光标。

在多行语句中,一些键具有特殊功能(导航箭头、Enter插入换行符等)。您必须将光标放在语句最后一行的末尾以获得默认行为,例如获取向上箭头↑</kbd> to mean "previous statement" instead of "move the cursor to the previous line". Or get Enter to mean "execute code" instead of "insert line break in the middle of code".

它的文档有点稀疏并且分散在不同的页面中,所以这里是开始使用它的三个基本链接:

  1. Qt 控制台简介

  2. 使用每个用户的配置文件而不是命令行参数来配置 IPython

    您对以下内容感兴趣ipython_qtconsole_config.py

  3. 如何在 Windows 7 上获得 ipython 图形控制台?

于 2013-10-13T12:00:01.577 回答
6

一个简单的方法是使用;\操作符。;发出命令结束的信号,并\在新行中指示命令如下:

In[4]: password = "123";\
       username = "alpha"

这将让您在 ipython 中拥有多行命令,而无需调用编辑器

于 2018-04-28T19:10:35.560 回答
4

Ctrl+q然后键入Enter。正如其他人指出的那样,Ctrl+q让你发送一个字符代码,但点击Ctrl+qthenEnter可能比Ctrl+qthen更自然Ctrl+j

另一种选择是在之后键入(then Enter、写入和删除(。此解决方案类似于您键入;\声明未完成的解决方案。

于 2018-07-27T07:45:44.073 回答
0

派对迟到了!但我注意到很多人都在谈论使用 Ctrl 组合来添加额外的行。在我看到关于它是 Emacs 绑定的评论之前,这对我不起作用。我已将我的行内编辑器设置为 Vi,如果您也有,那么Esc在您想要添加额外的行之前按进入该行的“正常”模式,然后按o(或者O如果您在该行之后)。就像在正常的 Vi(m) 中一样。为我工作!

于 2021-07-02T08:08:10.233 回答