python“up-button”命令完成,matlab / julia风格

时间:2015-12-01 22:43:47

标签: python matlab python-interactive interactive-shell

我最近从Matlab转到了Numpy而且很喜欢它。然而,我喜欢Matlab的一个非常好的事情是能够完成命令。它有两种方法:

1)标签完成。如果我有一个名为foobar(...)的函数,我可以做'fo',它会自动填入'foobar'

2)“按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,如 'x = linspace(0,1,100); A =眼睛(50);' 然后我希望快速键入这个相同的命令,以便我可以重新评估它或稍微更改它,然后我只需键入'x ='然后按下它,它将循环显示所有先前用'x开头的键入的命令=”。这是Matlab中一个非常棒的功能(如果您已经听说过Julia,它允许您自动重新输入整个块代码,例如在您定义函数时,它已经做得更好了。在交互式提示下)

这两个特性似乎都不存在于普通的python交互式shell中。我相信tab autocomplete之前已经讨论过了,可以使用.pythonrc启动脚本和一些模块来启用它们。但是我没有找到任何关于“按钮”完成的信息。 Python 具有基本的按钮功能,可以简单地滚动所有以前的命令,但是你不能在命令的开头输入并缩小滚动的命令范围,并且这会带来巨大的变化。

任何人都知道如何在普通的python交互式shell上获得此功能,而不需要任何需要单独安装的IPython笔记本等奇特的东西?

3 个答案:

答案 0 :(得分:1)

选项卡完成不是python 2.x解释器的标准功能。特定分发(打算,Linux发行版)可能附带启用标签完成的初始化文件。另一方面,python 3.x默认启用了自动完成功能。

要在2.x中启用标签页完成功能,您需要向口译员指示loading some startup code, using an environment variable

export PYTHONSTARTUP=$HOME/.whatever

要放入启动文件的代码各不相同,但启用标签页完成the docs have

try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

最终到了你的问题,你命名“按钮”命令完成,matlab / julia风格IPython有它,我不知道一个实现它的模块,即使在我看来,我在一个月前在comp.lang.python上读过这样的野兽。

在你的问题中你引用了IPython的笔记本......可能有必要提醒你不需要笔记本界面来使用IPython,即使在文本中也可以充分利用它控制台。

答案 1 :(得分:0)

使用iPython或其他一些Python shell。有很多。你甚至可以自己编程,做任何你想做的事。

答案 2 :(得分:-1)

  1. 标签完成。如果我有一个名为foobar(...)的函数,我可以做'fo'并自动填写'foobar'
  2. 真的?您使用的是哪个版本的Python,以及如何获得它?对于我来说,它适用于Windows和Linux的常规python shell,包括python 2.7和python 3.4。听起来你的Python版本可能不是用readline支持构建的,我认为这是这类事情所必需的。

    这就是我的尝试:

    >>> sup
    
    tab成为后的

    >>> super(
    
    1. “按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,例如'x = linspace(0,1,100); A =眼睛(50);'然后我希望快速键入这个相同的命令,以便我可以重新评估它或稍微更改它,然后我只需键入'x ='然后按下它,它将循环显示所有先前用'x开头的键入的命令=”
    2. 它被称为“历史搜索”,它也适用于Windows和Linux中的默认Python shell。我再次认为这需要readline

      >>> a = 'test'
      >>> a
      

      然后我按up,然后我得到:

      >>> a = 'test'
      

      您也可以按Ctrl+r,然后开始输入。这将在历史记录中搜索包含您键入内容的最后一个命令。所以,例如:

      >>> a = 'test'
      >>> b = 5
      >>> c = a
      

      然后ctrl+r

      >>>
      forward-i-search1`b: b = 5
      

      然后点击Enter执行该命令。

      >>>
      >>> b = 5
      >>>
      

      如果匹配不符合您的要求,您可以输入更多内容,或者再次点击Ctrl+r以循环显示匹配项。

      修改

      看起来这是内置Mac OS X版Python的已知问题。由于readline是GPL,它没有readline。相反,它包括libedit,它不完全兼容。有关如何使其在Mac Os X here

      上运行的说明