각 작업 디렉터리의 기록을 유지합니다(각 쉘 세션 참조).

각 작업 디렉터리의 기록을 유지합니다(각 쉘 세션 참조).

최신 쉘의 기록 기능을 경로 범위로 제한하는 방법이 있습니까?

내 작업 컨텍스트는 파일 시스템의 경로로 분할되며 쉘 활동 패턴(예: 반복적으로 실행되는 명령)은 각 "프로젝트"마다 다른 경향이 있습니다. 히스토리 기능의 범위를 현재 경로(또는 하위 경로)에서 실행된 명령으로 제한할 수 있다면 좋을 것입니다.

답변1

이는 간결한 답변은 아니지만 셸로 사용하는 경우 옵션이 있습니다 bash. 에서 이를 수행할 수 있습니다 .bashrc.

예를 들어:

alias a='cd /tmp/A ; history -w ; history -c ; export HISTFILE=/home/user/.a_history ; history -r $HISTFILE'
alias b='cd /tmp/B ; history -w ; history -c ; export HISTFILE=/home/user/.b_history ; history -r $HISTFILE'

그런 다음 다음을 입력하면 a:

  1. 프로젝트 디렉토리로 이동됩니다
  2. 현재 기록이 저장됩니다 ( history -w)
  3. 그러면 메모리에 저장된 이력이 초기화됩니다( history -c).
  4. 프로젝트 이력 파일은 으로 설정되어 /home/user/.a_history읽혀집니다 history -r.

답변2

이를 통해 zsh다음을 수행할 수 있습니다.

mkdir -p ~/.zsh/dirhist

~/.zshrc에 추가하세요.

HISTSIZE=1000
SAVEHIST=10000
setopt HIST_SAVE_NO_DUPS INC_APPEND_HISTORY
HISTFILE=~/.zsh/dirhist/${PWD//\//@}
chpwd() {
  [[ $PWD = $OLDPWD ]] || fc -Pp ~/.zsh/dirhist/${PWD//\//@}
}

chpwd()현재 디렉터리가 변경될 때마다 호출됩니다. 거기에서 우리는 당신 이 방문했을 ~/.zsh/dirhist/@foo@bar때 와 같은 기록 파일을 재설정했습니다 .cd/foo/bar

답변3

ZSH를 사용하는 경우 최근에 이 문제를 처리하기 위해 작성한 이 작은 플러그인을 살펴보세요.

https://github.com/ericfreese/zsh-cwd-history

HISTFILEchpwd명령을 실행하는 각 디렉토리에 대해 별도의 디렉토리를 저장하고 디렉토리를 변경할 때 s 사이를 전환하기 위한 후크를 추가합니다 .HISTFILE

HISTFILE또한 원래의 "전역" 디렉토리 HISTFILEHISTFILE현재 작업 디렉토리 사이를 전환 하는 키 입력에 바인딩할 수 있는 zle 위젯을 제공합니다 .

원래는 이걸 기반으로 한건데Jim Hester의 디렉토리별 기록플러그인이지만 이후 플러그인의 많은 문제를 해결하기 위해 처음부터 다시 작성되었습니다.

답변4

필요한 작업을 수행하는 ZSH 플러그인을 작성했습니다. https://github.com/tymm/zsh-directory-history

다른 솔루션과 비교했을 때 내 플러그인은 자동으로 전역 기록으로 돌아갑니다. 즉, 디렉터리 기록과 전역 기록 간에 전환할 필요가 없습니다.

그러나 다른 솔루션이 더 가볍다고 생각합니다.

관련 정보