감사해요클라에스 멜번내 현재 프롬프트는 다음과 같습니다
# this variable can be changed later to change the fraction of the line
export PROMPT_PERCENT_OF_LINE=40
# make a function, so that it can be evaluated repeatedly
function myPromptWidth() {
echo $(( ${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100 ))
}
# for some reason you can't put a function right in PROMPT, so make an
# intermediary variable
width_part='$(myPromptWidth)'
# if myPromptWidth is less than current prompt ... pad with dots
PS1="%F{013}%${width_part}<...<%d%f%F{012}\${__git_ps1_foo}%f%F{011}%(1j.jobs%j.)%f%(?.%F{004}.%F{001}✕%?)%<<%# %f"
그래서 출력은 다음과 같습니다
/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC% cd ~
/home/blueray%
하지만 모든 프롬프트의 길이가 같기를 바랍니다. 프롬프트 길이가 이보다 작으면 myPromptWidth
점으로 채워야 합니다.
그래서 내 예상 결과는 다음과 같습니다.
/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC% cd ~
.............................................../home/blueray%
어떻게 해야 하나요?
업데이트 1
나는 계속 노력하고 있습니다 %${width_part}(l.true-text.false-text)
. 작동하는지 모르므로 문제를 해결하십시오.
답변1
width_part='$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))'
PS1="%F{013}%$width_part<<\${(l[$width_part][.])}%~%F{012}\${__git_ps1_foo}%F{011}%(1j.jobs%j.)%(?.%F{004}.%F{001}✕%?)%<<%# %f"
즉, %<width><<truncated-part%<<
빈 대체 문자열(the 가 ...
사라졌음)을 사용하더라도 여전히 을 자르고 대신 <width>
매개변수의 시작 부분에 값을 삽입합니다..
truncated-part
${(l[<width>][.])}
당신은 모든 것이 있다는 것을 알게 될 것입니다더블- 따옴표, 일부 $
는 이스케이프되고 일부는 이스케이프되지 않습니다. ( )에 속하지 않는 것들은 $width_part
할당 시 확장되고, ( )에 속하는 것들은 문자 그대로 삽입되므로 $PS1
각 힌트가 평가될 때 확장됩니다. 이 변수의 실제 값은 다음과 같습니다 $PS1
.
%F{013}%$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))<<${(l[$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))][.])}%~%F{012}${__git_ps1_foo}%F{011}%(1j.jobs%j.)%(?.%F{004}.%F{001}✕%?)%<<%# %f
답변2
myPromptWidth
다음과 같은 것은 함수를 사용하여 적절한 수의 포인트에 힌트를 채웁니다.
width="$(myPromptWidth)"
print -v dots -f '%*s' $width .
dots=${dots// /.}
PS1="%$width<...<$dots %/%% "
결과는 다음과 같습니다.
......................./tmp%
dots
충분한 수의 포인트가 포함되어야 하며, 위의 내용은 이를 구성하는 한 가지 방법일 수 있습니다.
이것은 내가 글을 쓸 때 Stéphane이 언급한 내용과 거의 같습니다. 프롬프트를 점으로 채우고 쉘이 길이에 맞게 자르도록 합니다.
이보다 길면 프롬프트의 실제 유용한 부분도 잘립니다 $width
.