python“;“向上按钮”;命令完成,matlab/julia风格
我最近从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“;“向上按钮”;命令完成,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键,它就会循环使用
任何人都知道在普通的python交互式shell上获得此功能的方法,而不必去任何需要单独安装的IPython笔记本电脑之类的新奇事物?使用IPython或其他python shell。有很多。你甚至可以编写自己的程序来做任何你想做的事情
readline
支持构建,我认为这是此类事情所必需的
这就是我所尝试的:
>>> sup
在选项卡
变为:
>>> super(
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")