如何在shell中以相同的顺序重新运行一系列语句?

时间:2011-10-15 11:17:20

标签: python ruby bash shell

我打赌你遇到了和我一样的问题。我经常使用shell。对于pythonrubyirb),mongo ...我使用crt+a这样的简写来开始,crt+e at最后,crt+k清理到最后。

但我想念一件事。当你在ruby shell或python shell中定义一个多行块而你在一个语句中写错了什么时,你必须重写几乎所有东西,当你有超过3行时,up arrow带来的历史变得一团糟。

任何使这不那么痛苦的提示?

4 个答案:

答案 0 :(得分:3)

Pry(一个Ruby REPL)旨在让这种事情变得不那么痛苦。有几种方法可以解决这种情况:

(1)使用amend-line来修复该行。

enter image description here

(2)使用edit command将当前输入缓冲区转储到编辑器中,然后在保存/退出后将编辑器中所做的更改带回Pry会话。

(3)使用hist --replay重播然后更正REPL.strong文本中的行

在这些选项中,我通常会使用amend-line(如果这是一个简单的错误),edit如果它涉及的更多。

玩得开心!!

答案 1 :(得分:1)

查找可以将代码区域发送到python,ruby或mongo会话的文本编辑器。 Emacs可以做到这一点;我确信vim和其他编辑也可以这样做。

这样,您可以编辑和保存您的工作,并仍然可以利用交互式shell。

下面是一个示例,其中random_pick在文本文件中定义,选择该区域并按Ctrl-c Ctrl-.将其发送到IPython。它出现在以In [5]:开头的行上的IPython中。下一行显示IPython现在知道random_pick

enter image description here


对于IPython(与默认的Python shell相反),还有%cpaste,它允许您将多行代码块剪切并粘贴到shell中:

In [54]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:def random_pick(choices,probs):
    cutoffs=np.cumsum(probs)
    idx=cutoffs.searchsorted(random.uniform(0,cutoffs[-1]))
    return choices[idx]
--
:::::::::

在[55]中:

答案 2 :(得分:1)

对于红宝石,看看撬是否适合你:http://pry.github.com

pry是irb的替代品,它有一个非常灵活的hist命令来检索和重放历史记录。它提供了对更改多行语句的更多控制。请参阅此要点以了解使用pry可以执行的操作:https://gist.github.com/972057

答案 3 :(得分:0)

对于Python,只需使用随附的IDLE。如果将光标置于终端窗口中的多行语句中并按Enter键,则整个语句将复制到输入行以进行编辑。