在IPython历史中搜索
ipython的%his
命令可以显示用户最近输入的命令。请问有没有办法在这些命令中搜索呢?比如说这样:
[c for c in %history if c.startswith('plot')]
编辑 我不是想要重新运行一个命令,而是想在历史列表中找到它。当然,有时候我会想在找到命令后重新运行它,可能是完全一样的,或者稍微改动一下。
编辑 使用ctr-r
进行搜索,然后输入plot
,会显示最近一个以“plot”开头的命令。但它不会列出所有以“plot”开头的命令。而且你也不能在命令的中间或末尾进行搜索。
解决方案
在这里扩展一下PreludeAndFugue的解决方案,这正是我想要的:
[l for l in _ih if l.startswith('plot')]
在这里,if
条件可以用正则表达式来替代。
7 个回答
20
如果你想重新运行之前输入过的命令,可以试试按 Ctrl-r
,然后输入你要查找的内容。
67
更棒的是:%hist -g pattern
可以在你的历史记录中搜索 pattern
。你还可以把搜索限制在当前会话,或者特定的行范围内。可以查看 %hist?
来了解更多信息。
所以对于 @BorisGorelik 的问题,你需要这样做:
%hist -g plot
不幸的是,你不能这样做:
%hist -g ^plot
也不能这样:
%hist -g "^plot"
8
和第一个答案类似,你可以这样做:
''.join(_ih).split('\n')
不过,当你在查看命令历史记录时,可以这样做。这样你就可以从中创建你的列表推导式。
for item in _ih:
print item
这在文档的以下部分有说明: http://ipython.org/ipython-doc/dev/interactive/reference.html#input-caching-system