여러 터미널 창에서 공유되는 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에 바인딩하는 고유한 함수를 만들 수 있습니다.

관련 정보