ipython的%his
命令输出用户输入的最新命令。是否可以在这些命令中搜索?像这样:
[c for c in %history if c.startswith('plot')]
编辑我不是在寻找重新运行命令的方法,而是在历史列表中找到它。当然,有时我会想要在找到命令后重新运行命令,无论是逐字还是修改。
编辑使用ctr-r
进行搜索,然后键入plot
会显示以“plot”开头的最新命令。它不会列出以它开头的所有命令。你也不能在命令的中间或末尾搜索
在这里扩展PreludeAndFugue的解决方案:
[l for l in _ih if l.startswith('plot')]
这里,if
条件可以用正则表达式替换
答案 0 :(得分:45)
更好:%hist -g pattern
会影响pattern
过去的历史记录。您还可以将搜索范围限制为当前会话或特定范围的行。见%hist?
所以对于@ BorisGorelik的问题你必须要做
%hist -g plot
不幸的是你无法做到
%hist -g ^plot
,也不
%hist -g "^plot"
答案 1 :(得分:13)
如果您想在历史记录中重新运行命令,请尝试Ctrl-r
,然后尝试搜索字符串。
答案 2 :(得分:10)
我经常发现自己想在所有之前和当前会话中搜索整个ipython历史记录。为此,我使用:
from IPython.core.history import HistoryAccessor
hista = HistoryAccessor()
z1 = hista.search('*numpy*corr*')
z1.fetchall()
或(不要同时运行,否则会损坏/删除历史记录)
ip = get_ipython()
sqlite_cursor = ip.history_manager.search('*numpy*corr*')
sqlite_cursor.fetchall()
搜索字符串不是正则表达式。 iPython history_manager使用sqlite的glob *
搜索语法。
答案 3 :(得分:7)
与第一个答案类似,您可以执行以下操作:
''.join(_ih).split('\n')
但是,在遍历命令历史记录项时,您可以执行以下操作。因此,您可以从中创建列表理解。
for item in _ih:
print item
这在文档的以下部分中有记录: http://ipython.org/ipython-doc/dev/interactive/reference.html#input-caching-system
答案 4 :(得分:1)
你可以这样做:
''.join(_ip.IP.shell.input_hist).split('\n')
或
''.join(_ip.IP.shell.input_hist_raw).split('\n')
防止魔法扩张。
答案 5 :(得分:0)
from IPython.core.history import HistoryAccessor
def search_hist(pattern,
print_matches=True,
return_matches=True,
wildcard=True):
if wildcard:
pattern = '*' + pattern + '*'
matches = HistoryAccessor().search(pattern).fetchall()
if not print_matches:
return matches
for i in matches:
print('#' * 60)
print(i[-1])
if return_matches:
return matches
答案 6 :(得分:0)
%history [-n] [-o] [-p] [-t] [-f FILENAME] [-g [PATTERN [PATTERN ...]]]
[-l [LIMIT]] [-u]
[range [range ...]]
....
-g <[PATTERN [PATTERN …]]>
treat the arg as a glob pattern to search for in (full) history. This includes the saved history (almost all commands ever written). The pattern may contain ‘?’ to match one unknown character and ‘*’ to match any number of unknown characters. Use ‘%hist -g’ to show full saved history (may be very long).
示例(在我的历史记录中):
In [23]: hist -g cliente*aza
655/58: cliente.test.alguna.update({"orden" : 1, "nuevo" : "azafran"})
655/59: cliente.test.alguna.update({"orden" : 1} , {$set : "nuevo" : "azafran"})
655/60: cliente.test.alguna.update({"orden" : 1} , {$set : {"nuevo" : "azafran"}})
示例(在我的历史记录中):
In [24]: hist -g ?lie*aza
655/58: cliente.test.alguna.update({"orden" : 1, "nuevo" : "azafran"})
655/59: cliente.test.alguna.update({"orden" : 1} , {$set : "nuevo" : "azafran"})
655/60: cliente.test.alguna.update({"orden" : 1} , {$set : {"nuevo" : "azafran"}})