python“;“向上按钮”;命令完成,matlab/julia风格

python“;“向上按钮”;命令完成,matlab/julia风格,python,matlab,python-interactive,interactive-shell,Python,Matlab,Python Interactive,Interactive Shell,我最近从Matlab转到Numpy,我很喜欢它。然而,我喜欢Matlab的一个非常好的地方是它能够完成命令。有两种方法可以做到这一点: 1) 制表符完成。如果我有一个名为foobar(…)的函数,我可以执行“fo”,它会自动填充“foobar” 2) “向上按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,如 'x=linspace(0,1100);A=眼睛(50);' 然后我想快速输入同一个命令,这样我可以重新计算它或稍微修改它,然后我只需输入'x=',然后按up键,它就会循环使用

我最近从Matlab转到Numpy,我很喜欢它。然而,我喜欢Matlab的一个非常好的地方是它能够完成命令。有两种方法可以做到这一点:

1) 制表符完成。如果我有一个名为foobar(…)的函数,我可以执行“fo”,它会自动填充“foobar”

2) “向上按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,如 'x=linspace(0,1100);A=眼睛(50);' 然后我想快速输入同一个命令,这样我可以重新计算它或稍微修改它,然后我只需输入'x=',然后按up键,它就会循环使用您以前键入的所有以'x='开头的命令。这是Matlab中一个非常棒的特性(如果你听说过Julia,它甚至做得更好,它允许你自动重新输入整个代码块,比如在交互式提示下定义函数时)

这两个特性似乎都不存在于普通的python交互式shell中。我相信tab autocomplete之前已经讨论过,可能可以使用.pythonrc启动脚本和一些模块启用;然而,我还没有发现任何关于“向上按钮”完成。Python确实具有基本的向上按钮功能,可以简单地滚动所有以前的命令,但您不能在命令的开头键入,从而缩小滚动的命令范围,这会产生巨大的差异


任何人都知道在普通的python交互式shell上获得此功能的方法,而不必去任何需要单独安装的IPython笔记本电脑之类的新奇事物?

使用IPython或其他python shell。有很多。你甚至可以编写自己的程序来做任何你想做的事情

  • 制表符完成。如果我有一个名为foobar(…)的函数,我可以执行“fo”,它会自动填充“foobar”
  • 真的吗?您使用的是哪个版本的Python?您是如何获得它的?对于我来说,它适用于windows和Linux的常规python shell,同时支持Python2.7和Python3.4。听起来,您的Python版本可能没有使用
    readline
    支持构建,我认为这是此类事情所必需的

    这就是我所尝试的:

    >>> sup
    
    选项卡
    变为:

    >>> super(
    
  • “向上按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,比如'x=linspace(0,1100);A=眼睛(50);'然后我想快速输入同一个命令,这样我可以重新计算它或稍微修改它,然后我只需输入'x=',然后按up键,它就会循环使用您以前键入的所有以'x='开头的命令
  • 它被称为“历史搜索”,在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
    ,在匹配项之间循环

    编辑


    这似乎是内置MacOSX版Python的一个已知问题。由于readline是GPL,所以它不附带readline。相反,它包括libedit,它不是完全兼容的。这里有一些关于如何在Mac Os X上运行的说明。Tab completion不是python 2.X解释器的标准功能。可能是特定发行版(预期的Linux发行版)附带了启用制表符完成的初始化文件。另一方面,Python3.x默认启用了自动完成功能

    要在2.x中启用制表符完成,您需要向解释器说明

    要放入启动文件的代码各不相同,但用于启用制表符完成

    最后谈到您的ast问题,您称之为“up button”命令完成的matlab/julia样式,有它,我不知道有哪个模块实现了它,即使在我看来,几个月前我在comp.lang.python上读到了关于这样一个野兽的东西


    在你的问题中,你提到了IPython的笔记本。。。可能需要提醒的是,使用IPython不需要笔记本界面,它甚至可以在文本控制台中充分发挥其潜力。

    是的,但是python交互式shell不是独立于bash吗?例如,在bash中,您可以使用类似的东西,但它与python shell是分开的?我在想,也许吧,但我对shell没有太多经验。虽然我不同意这种观点,但这并不能回答问题。ipython确实通过按向上键来提供制表符完成和命令历史记录。什么观点?如果你是说我爱上了伊皮顿,那你就大错特错了。我讨厌它像个贝壳。顺便说一句,我一般不同意编程中的自动完成,因为它会让程序员变得愚蠢。然而,我同意使用Python代替matlab/octave的数学家应该拥有它。但我并不反对历史上的代码块。为什么我的答案不能回答问题???iPython也支持自动完成和许多其他shell。我很感谢您的回答,但在我的原始问题中,我特别提到了“没有iPython”,我不会跟踪编辑以查看原始问题中写的内容。很抱歉如果您讨厌ipython的输出样式,可以将其更改为类似于普通的Python shell。用谷歌搜索Python外壳,看看哪些支持自动完成。或者写你自己的。这并不难。您有cmd、code、IDLELib等模块可以帮助您。顺便说一句,IDLE支持自动完成,但正如我得到的,您需要CLI shell。那里
    export PYTHONSTARTUP=$HOME/.whatever
    
    try:
        import readline
    except ImportError:
        print "Module readline not available."
    else:
        import rlcompleter
        readline.parse_and_bind("tab: complete")