【问题标题】:Adding line breaks in ipython在 ipython 中添加换行符
【发布时间】:2012-11-23 22:24:12
【问题描述】:

如果在 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 中编辑该多行命令吗?

【问题讨论】:

  • 如果你在家里玩,原来真正的解决方案是gedit + ipython listener。编辑并运行,而不是尝试在终端中编写循环。

标签: python ipython


【解决方案1】:

这个问题困扰了一段时间。刚刚发现使用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

【讨论】:

  • 这也适用于使用 ConEmu 的 Powershell 中的 Windows。 ^_^
  • 这对我有用,ctrl-v 的其他答案对我不起作用,但 ctrl-q 让我加入换行符
  • 注意:你不必放开 Ctrl 来工作:你可以按住 Ctrl 并按 q 然后按 j
  • 不错的发现!你是怎么发现这个的?
  • @javadba:该组合用于在 Emac 的 minibuffer 中添加换行符。我抓住了它可能适用于 IPython 的机会。
【解决方案2】:

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

In [1]: def foo(x):
   ...:     print x
   ...:     
In [2]: %edit _i1

【讨论】:

  • 我确实浏览了文档,但不太清楚这就是我要找的东西。
  • 对于我们这些 iPython 新手,还想指出 %edit _2 将重新打开上面示例中的编辑会话,%edit -p 总是打开您的最后一个编辑会话。跨度>
  • 对我来说%edit 打开了我最不最喜欢的编辑器!我该如何请求另一个?
  • @peer %edit 使用环境变量EDITOR,许多命令行实用程序在需要打开编辑器时使用该变量。例如,如果您运行 EDITOR=vim ipython - 将使用 vim。您可以在 bashrc/zshrc/etc 中将其设置为不同的值。文件,所以它会一直被使用。
【解决方案3】:

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

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

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

【讨论】:

  • 也可以使用ctrl-v、ctrl-i添加标签。
  • 或者ctrl-v,tab添加标签
【解决方案4】:

您可以使用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 一起使用。

【讨论】:

    【解决方案5】:

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

    在多行语句中,一些键具有特殊功能(箭头导航,Enter 插入换行符等)。您必须将光标定位在语句的最后一行的末尾才能获得默认行为,例如让向上箭头 表示“上一条语句”而不是“将光标移动到上一行”。或者让 Enter 表示“执行代码”而不是“在代码中间插入换行符”。

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

    1. Intro to the Qt Console

    2. Configuring IPython using nice per-user profile files instead of command line arguments

      您对ipython_qtconsole_config.py感兴趣

    3. How to get an ipython graphical console on Windows 7?

    【讨论】:

      【解决方案6】:

      一个简单的方法是使用;\ 运算符。 ; 表示命令结束,\ 表示命令在新行中,如下所示:

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

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

      【讨论】:

        【解决方案7】:

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

        另一种选择是输入(,然后输入Enter,然后写入并删除(。此解决方案类似于您键入 ;\ 表示语句未完成的解决方案。

        【讨论】:

        • Ctrl+q Enter 快捷方式不适用于 IPython 7.3.0,但适用于 IPython 5.3.0。我正在使用 git bash 2.18.0 + Windows 7。另一种方法是使用Ctrl+on,它在两个 IPython 版本中都运行良好。
        【解决方案8】:

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

        【讨论】:

          猜你喜欢
          • 2012-04-17
          • 1970-01-01
          • 2014-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-28
          • 2020-10-19
          相关资源
          最近更新 更多