따라서 현재 프롬프트는 다음과 같습니다.
~/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 .