ご了承ください。これは、基本的な履歴制御オプションに関するもう1つの質問であるだけでなく、それについての明確なユースケースがあると思います。
ユースケース
実行中のインスタンスが多いzsh
(tmux
tmux連続体と復活を使用)。次の要件があります。
各インスタンスに対して独立した履歴を持つことができるようにしたいです
zsh
。つまり、各インスタンスがzsh
起動したときにのみグローバル履歴ファイルを読み取るようにし、過去のコマンドを検索するときは読み取らないようにします(sharehistory
設定したくありません)。その理由は、1つのセッション(Aセッションzsh
のウィンドウで作業内容を処理しているtmux
間にそこに表示され始めるためです)。zsh
しかし、時々私は与えられたコマンドにあり、どのウィンドウ
zsh
で目的のコマンドを実行したか覚えておらず、現在のコマンドで実行したいと思います。だから別のウィンドウで実行できるようにしたい。インスタンスは、コマンドが実行されるとすぐに(グローバル履歴から)accessコマンドを実行しますが、zsh
tmux
zsh
zsh
任意の代替手段によってのみ可能であり、いいえ逆増分履歴検索を使用(Ctrl+ R)または履歴スタックzsh
(Ctrl+ P)にあります。これは、「ローカル」記録用にのみ予約する必要があるためです。
したがって、ソリューションは他のインスタンスで必要な履歴を見つける必要zsh
がありますが、Ctrl+Rいいえ、記録は現在の記録に蓄積してはいけませんzsh
。
研究してみてください
これに基づいて、unsetopt sharehistory
要件1を満たす必要があり、setopt incappendhistory
要件2で要求される側面ですが、要件のすべてではありません。
history_get_global
grepするシェル関数を作成し~/.zsh_history
(増分履歴追加セットがあるのですべての新しい項目がそこにあるので)、選択できる方法で拡張できますが、実行できる方法があるかどうかを知りたいです。zsh
ホイールを再発明することなく、基本的にこれを行うことができます。
これを行うとexec $SHELL
(シェルを新しいインスタンスに置き換える)、すべてのセッションの完全な共有履歴が得られます(そこで設定されてinappendhistory
いると仮定)、それは望ましくありません。私はこの質問のトピックに必要なアプローチを使用して別の履歴行を維持し、少量の他のセッションコマンドを追加します。おそらく、グローバル履歴の使用さえもローカル履歴スタックにプッシュされないため、ローカルのzsh履歴スタックは孤立したままになります。