zsh:他のzshセッションの履歴にアクセスしますが、デフォルトではない選択方法を介してのみ可能です(例:逆増分検索、履歴スタック)。

zsh:他のzshセッションの履歴にアクセスしますが、デフォルトではない選択方法を介してのみ可能です(例:逆増分検索、履歴スタック)。

ご了承ください。これは、基本的な履歴制御オプションに関するもう1つの質問であるだけでなく、それについての明確なユースケースがあると思います。

ユースケース

実行中のインスタンスが多いzshtmuxtmux連続体と復活を使用)。次の要件があります。

  1. 各インスタンスに対して独立した履歴を持つことができるようにしたいですzsh。つまり、各インスタンスがzsh起動したときにのみグローバル履歴ファイルを読み取るようにし、過去のコマンドを検索するときは読み取らないようにします(sharehistory設定したくありません)。その理由は、1つのセッション(Aセッションzshのウィンドウで作業内容を処理しているtmux間にそこに表示され始めるためです)。zsh

  2. しかし、時々私は与えられたコマンドにあり、どのウィンドウzshで目的のコマンドを実行したか覚えておらず、現在のコマンドで実行したいと思います。だから別のウィンドウで実行できるようにしたい。インスタンスは、コマンドが実行されるとすぐに(グローバル履歴から)accessコマンドを実行しますが、zshtmuxzshzsh任意の代替手段によってのみ可能であり、いいえ逆増分履歴検索を使用(Ctrl+ Rまたは履歴スタックzshCtrl+ P)にあります。これは、「ローカル」記録用にのみ予約する必要があるためです。

したがって、ソリューションは他のインスタンスで必要な履歴を見つける必要zshがありますが、Ctrl+Rいいえ、記録は現在の記録に蓄積してはいけませんzsh

研究してみてください

これに基づいて、unsetopt sharehistory要件1を満たす必要があり、setopt incappendhistory要件2で要求される側面ですが、要件のすべてではありません。

history_get_globalgrepするシェル関数を作成し~/.zsh_history(増分履歴追加セットがあるのですべての新しい項目がそこにあるので)、選択できる方法で拡張できますが、実行できる方法があるかどうかを知りたいです。zshホイールを再発明することなく、基本的にこれを行うことができます。

これを行うとexec $SHELL(シェルを新しいインスタンスに置き換える)、すべてのセッションの完全な共有履歴が得られます(そこで設定されてinappendhistoryいると仮定)、それは望ましくありません。私はこの質問のトピックに必要なアプローチを使用して別の履歴行を維持し、少量の他のセッションコマンドを追加します。おそらく、グローバル履歴の使用さえもローカル履歴スタックにプッシュされないため、ローカルのzsh履歴スタックは孤立したままになります。

関連情報