私は解決策を読んだ。複数の端末ウィンドウでbash履歴を保持する 私は次の妥協点を探しています。
- 同時セッションのすべてのコマンドは、
bash
実行後に共有ファイルに追加されます。 - Ctrl+rあるセッションで別のセッションのコマンドを探す
- セッションでUp/タップDownただこのセッションのコマンドを繰り返します。
可能ですかbash
?そうでなければ、zsh
多分?
答え1
同様の目標を達成しようとすると、偶然にこの質問を見つけました。私は次があなたの問題を解決すると信じています。
ファイルを使用して実行されたすべてのコマンドを記録します。貢献してくれたEli Benderskyに感謝します。郵便はがき、私は彼のコードをそのまま使用しており、唯一の変更は
$PERSISTENT_HISTORY_FILE
。インストールする富士キーバインディングを使用してください(パッケージマネージャを介してインストールすると、キーバインディングが設定されているかどうかはわかりませんが、gitスクリプトとインストールスクリプトで設定されます)。
__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にバインドする独自の関数を作成できます。