在ipython历史中搜索

Bor*_*lik 27 python ipython

ipython%his命令输出用户输入的最近命令.是否可以在这些命令中搜索?像这样的东西:

[c for c in %history if c.startswith('plot')]
Run Code Online (Sandbox Code Playgroud)

编辑我不是在寻找重新运行命令的方法,而是在历史列表中找到它.当然,有时我会想要在找到命令后重新运行命令,无论是逐字还是修改.

编辑搜索ctr-r然后键入plot会给出以"plot"开头的最新命令.它不会列出以它开头的所有命令.你也不能在命令的中间或末尾搜索

在这里扩展PreludeAndFugue的解决方案我正在寻找:

[l for l in  _ih if l.startswith('plot')]
Run Code Online (Sandbox Code Playgroud)

在这里,if条件可以用正则表达式代替

use*_*650 51

更好的是:%hist -g pattern为你过去的历史而努力pattern.您还可以将搜索范围限制为当前会话或特定范围的行.看到%hist?

所以对于@ BorisGorelik的问题,您必须这样做

%hist -g plot
Run Code Online (Sandbox Code Playgroud)

不幸的是你做不到

%hist -g ^plot
Run Code Online (Sandbox Code Playgroud)

也不

%hist -g "^plot"
Run Code Online (Sandbox Code Playgroud)

  • 警告:上面的管道(`|`)是要搜索的模式的一部分,而不是一些新的魔术正则表达式或字符串文字分隔符.因此,如果您正在寻找文字"模式",请不要使用任何类型的字符串分隔符,只需键入`%history -g pattern`如果您使用引号或任何内容,它将失败.一些正则表达式字符将被命令行解析器吞噬,如`%history -g pattern?`将触发docstring帮助并失败,但%history -g patter [n]将起作用. (3认同)

fma*_*ark 14

如果要在历史记录中重新运行命令,请尝试使用Ctrl-r搜索字符串.

  • 找到了..好像..我只需要按`Ctrl-R`来循环浏览历史记录,就像在bash中一样.. (3认同)

Pau*_*aul 10

我经常发现自己想在所有之前和当前会话中搜索整个ipython历史记录.为此,我使用:

from IPython.core.history import HistoryAccessor
hista = HistoryAccessor()
z1 = hista.search('*numpy*corr*')
z1.fetchall()
Run Code Online (Sandbox Code Playgroud)

或者(不要同时运行或者你会破坏/删除你的历史)

ip = get_ipython()
sqlite_cursor = ip.history_manager.search('*numpy*corr*')
sqlite_cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

搜索字符串不是正则表达式.iPython history_manager使用sqlite的glob *搜索语法.


Gar*_*err 7

与第一个答案类似,您可以执行以下操作:

''.join(_ih).split('\n')
Run Code Online (Sandbox Code Playgroud)

但是,在遍历命令历史记录项时,您可以执行以下操作.因此,您可以从中创建列表理解.

for item in _ih:
    print item
Run Code Online (Sandbox Code Playgroud)

这在文档的以下部分中有记录:http: //ipython.org/ipython-doc/dev/interactive/reference.html#input-caching-system