2017-02-21 3 views
1

私は、Mac Sierra、iTerm、$SHELL=bashでAnacondaからiPython(Jupyter)を実行しています。もし私が設定の詳細を見落としてしまったら、教えてください。ignorebothに相当するPython:erasedups

私は$HISTCONTROLの面がbashであり、hereと言いました。その答えを集約する:歴史を辿るとき(上矢印を押すと)、同じコマンドを複数回スクロールしないように重複したエントリを削除すると便利です。これは$HISTCONTROL=ignoreboth:erasedupsで実行されます。

Pythonインタプリタ(または特にiPython)内にこれに相当するものはありますか?私にはreadlineがインストールされていて、それは始まるのに良い場所だと感じていますが、明らかに問題を解決するものは何も飛び出さなかったので、どこかに組み込まれていると思いました。

答えて

0

IPythonを深く掘り下げて、あまり説明されていないドキュメントや廃止されたドキュメントを掘り下げて、私はうまくいくと思われるソリューションをまとめましたが、それはいくつかの理由で最適ではないと確信しています。すなわち: - 私はhistoryを変更しますが、無視

  • はそれが私はそれがデータベーステーブルを座標クリーンアップ/ために世話をしていません
  • IPythonの行を実行するたびhistoryデータベース上GROUP BYクエリを実行しますoutput_historyおよびsessionsテーブル

私は$HOME/.ipython/profile_default/startup内のファイル(私はdedupe_history.pyそれを名前を付けられますが、名前は無関係である)に次のように置く:

import IPython 
import IPython.core.history as H 
## spews a UserWarning about locate_profile() ... seems safe to ignore 
HISTORY = H.HistoryAccessor() 


def dedupe_history(): 
    query = ("DELETE FROM history WHERE rowid NOT IN " 
     "(SELECT MAX(rowid) FROM history GROUP BY source)") 
    db = HISTORY.db 
    db.execute(query) 
    db.commit() 


def set_pre_run_cell_event(): 
    IPython.get_ipython().events.register("pre_run_cell", dedupe_history) 

## dedupe history at start of new session - maybe that's sufficient, YMMV 
dedupe_history() 
## run dedupe history every time you run a command 
set_pre_run_cell_event()