複数の端末ウィンドウで共有されているbash履歴を検索しますが、セッションは別々に保持されます。

複数の端末ウィンドウで共有されているbash履歴を検索しますが、セッションは別々に保持されます。

私は解決策を読んだ。複数の端末ウィンドウでbash履歴を保持する 私は次の妥協点を探しています。

  1. 同時セッションのすべてのコマンドは、bash実行後に共有ファイルに追加されます。
  2. Ctrl+rあるセッションで別のセッションのコマンドを探す
  3. セッションでUp/タップDownただこのセッションのコマンドを繰り返します。

可能ですかbash?そうでなければ、zsh多分?

ベストアンサー1

同様の目標を達成しようとすると、偶然にこの質問を見つけました。私は次があなたの問題を解決すると信じています。

  1. ファイルを使用して実行されたすべてのコマンドを記録します。貢献してくれたEli Benderskyに感謝します。郵便はがき、私は彼のコードをそのまま使用しており、唯一の変更は$PERSISTENT_HISTORY_FILE

  2. インストールする富士キーバインディングを使用してください(パッケージマネージャを介してインストールすると、キーバインディングが設定されているかどうかはわかりませんが、gitスクリプトとインストールスクリプトで設定されます)。

  3. __fzf_history機能をfzf/shell/key-bindings.bash次に変更します。

__fzf_history__() {
  local output opts script
  opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort ${FZF_CTRL_R_OPTS-} +m --read0"
  script='BEGIN { $/ = "\n"; $HISTCOUNT = $ENV{last_hist} + 1 } s/^[ *]//; print $HISTCOUNT - $. . "\t$_" if !$seen{$_}++'
  output=$(
    tac $PERSISTENT_HISTORY_FILE |
        last_hist=$(HISTTIMEFORMAT='%F %T  ' builtin history 1) perl -n -l0 -e "$script" |
      FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) --query "$READLINE_LINE"
    ) || return
  READLINE_LINE=${output#*| }
  if [[ -z "$READLINE_POINT" ]]; then
    echo "$READLINE_LINE"
  else
    READLINE_POINT=0x7fffffff
  fi
}

明らかに、fzfの詳細から上記のコードを削除し、それをCtrl + Rにバインドする独自の関数を作成できます。

おすすめ記事