在IPython历史中搜索

37 投票
7 回答
18248 浏览
提问于 2025-04-16 00:55

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

撰写回答