33

ipython%hisコマンドは、ユーザーが入力した最近のコマンドを出力します。これらのコマンド内で検索することはできますか? このようなもの:

[c for c in %history if c.startswith('plot')]

EDITコマンドを再実行する方法を探しているのではなく、履歴リストで見つけます。もちろん、コマンドを見つけた後で、コマンドをそのまままたは変更して再実行したい場合もあります。

で検索しctr-rて入力すると、「 plotplot」で始まる最新のコマンドが表示されます。それで始まるすべてのコマンドを一覧表示するわけではありません。コマンドの途中または最後で検索することもできません

解決

ここでPreludeAndFugueのソリューションを拡張すると、私が探していたもの:

[l for l in  _ih if l.startswith('plot')]

ここで、if条件は正規表現で置き換えることができます

4

7 に答える 7

61

さらに良い%hist -g patternことに、 の過去の履歴を grep しますpattern。さらに、検索を現在のセッションまたは特定の範囲の行に制限することができます。見る%hist?

@BorisGorelikの質問については、あなたがしなければならないでしょう

%hist -g plot

残念ながら、あなたはできません

%hist -g ^plot

または

%hist -g "^plot"
于 2013-05-31T19:05:40.620 に答える
18

履歴内のコマンドを再実行する場合はCtrl-r、検索文字列を試してから実行してください。

于 2010-07-07T11:12:17.780 に答える
12

私は通常、以前と現在のすべてのセッションで 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 はglob *代わりに sqlite の検索構文を使用します。

于 2013-12-12T19:00:50.137 に答える
8

最初の回答と同様に、次のことができます。

''.join(_ih).split('\n')

ただし、コマンド履歴項目を反復処理する場合は、次のことができます。したがって、これからリスト内包表記を作成できます。

for item in _ih:
    print item

これは、ドキュメントの次のセクションに記載されています: http://ipython.org/ipython-doc/dev/interactive/reference.html#input-caching-system

于 2010-07-07T10:56:54.323 に答える
1

あなたがそれを行うことができる方法があります:

''.join(_ip.IP.shell.input_hist).split('\n')

また

''.join(_ip.IP.shell.input_hist_raw).split('\n')

魔力拡張を防ぐ。

于 2010-07-07T10:52:53.370 に答える