현재 작업 디렉토리의 끝을 별도로 표시하도록 zsh 프롬프트를 사용자 정의하십시오.

현재 작업 디렉토리의 끝을 별도로 표시하도록 zsh 프롬프트를 사용자 정의하십시오.

따라서 현재 프롬프트는 다음과 같습니다.
~/path/to/dir %

가능하다면 다음과 같이 최상위 디렉토리만 표시하고 싶습니다.
~/path/to (dir) %

나는 가깝다! 내 .zshrc에는 현재 다음이 있습니다. PROMPT="%~ (%1d) %#"출력:
~/path/to/dir (dir) %

첫 번째 경로에서 마지막 폴더 "dir"을 제거하면 됩니다. 어떤 아이디어가 있나요?

(참고: 제가 물었습니다.스택 오버플로에 대한 이 질문여기로 리디렉션됩니다. )

답변1

%1d"마지막 구성 요소"와 "첫 번째 구성 요소" 라고 말할 수 있지만 %-1d"마지막 구성 요소를 제외한 모든 구성 요소"는 말할 수 없습니다.

프롬프트 이스케이프 시퀀스 대신 변수 확장을 사용할 수 있습니다.

setopt prompt_subst
PROMPT='${${PWD//#$HOME/~}%/*} (%1d) %#'

루트 디렉터리와 그 바로 아래 디렉터리는 물론, 홈 디렉터리와 그 바로 아래 디렉터리도 조정해야 할 수 있습니다.

또는 디렉터리가 변경될 때마다 프롬프트의 이 부분을 다시 계산할 수 있습니다. 이는 귀하의 특수 케이스를 얼마나 맞춤화하려는지에 따라 귀하의 케이스에 유용할 수도 있고 약간 과잉일 수도 있습니다.

setopt prompt_subst
PROMPT='$psvar[1] %#'
chpwd_prompt () {
  local HPWD=${(%)${:-%~}} # $PWD with ~ abbreviations
  case $HPWD in
    *?/*) psvar[1]="${HPWD%/*} (${HPWD##*/})";;
    *) psvar[1]="($HPWD)";;
  esac
}
chpwd_functions+=(chpwd_prompt)
# Trigger the chpwd hooks once
cd .

관련 정보