나는 해결책을 읽었습니다.여러 터미널 창에서 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에 바인딩하는 고유한 함수를 만들 수 있습니다.