이것은 현재 프롬프트 정의입니다.
PS1=$'%F{063}%1~%f %(1v.%F{099}%1v %f.)%F{063}%%%f '
RPROMPT='$VIMODE %m'
통합하려고 하는데이것. 기본적으로 나는 읽기가 매우 어렵다는 것을 알기 시작했습니다.
아마도 Perl이 정규 표현식에 대해 수행하는 것과 유사하게 여러 줄로 만들 수 있는 방법이 있습니까(예: /x 패턴의 기능. . 처럼 m{ ... }x
여러 ...
줄이 될 수 있음)?
이 같은:
PS1=$'
%F{063}%1 # format blue
~ # show current directory
%f
%(1v.%F{099}%1v %f.) # show git branch if git repo in purple
%F{063} # format blue
%# # % for user and # for root
%f '
RPROMPT='$VIMODE %m'
답변1
다음을 수행할 수 있습니다.
PS1='%F{063}%1' # format blue
PS1=$PS1'~' # show current directory
PS1=$PS1'%f'
PS1=$PS1'%(1v.%F{099}%1v %f.)' # show git branch if git repo in purple
등. ?
답변2
Zsh 4.3.11에서는 Z
인수 확장 플래그를 사용하여 일반 쉘 구문 분석 규칙에 따라 문자열 값을 분할하는 동시에 주석( C
option )을 삭제하고 새 줄을 세미콜론( option ) Z
으로 바꾸는 대신 일반 공백으로 처리할 수 있습니다. 그런 다음 결과를 다시 모으고( ) 인용 수준을 평가하여( ) 공백 및 기타 문제가 있는 문자(예: "기본" 주석 소개 문자)를 인용할 수 있습니다.n
Z
j::
Q
PS1=${(j::Q)${(Z:Cn:):-$'
%F{063}%1 # format blue
~ # show current directory
%f" "
%(1v.%F{099}%1v %f.) # show git branch if git repo in purple
%F{063} # format blue
%# # % for user and # for root
%f" "
'}}
참고: 이 구문 분석 모드는 전체 표현식을 단일 단어로 구문 분석해야 한다는 것을 알고 있는 것 같으 %(v…)
므로 조건 값에 포함된 공간을 보호할 필요가 없습니다. 그러나 "맨 위" 공백( 바로 뒤의 공백)을 보호해야 합니다 %f
. 그렇지 않으면 일반 단어 구분 기호로 처리되기 때문입니다. 최종 역참조 패스는 모든 인용 메커니즘(예: \
, ''
, ""
, $''
)을 처리하므로 특수 문자(예: "상위" 공백 또는 최종 값에 대한 주석 소개자)를 보호하기 위한 항목을 선택할 수 있습니다.
4.3.11을 사용하지 않는 경우 문자열 요소에 주석을 삽입할 수 있는 배열을 사용할 수 있습니다. 매개변수 확장 플래그보다 더 많은 참조를 사용해야 할 수도 있지만 Z
결과는 여전히 허용할 수 있습니다.
ps1_arr=(
%F{063}%1 # format blue
\~ # show current directory
%f' '
'%(1v.%F{099}%1v %f.)' # show git branch if git repo in purple
%F{063} # format blue
%\# # % for user and # for root
%f' '
)
PS1=${(j::)ps1_arr}
인용에 대한 참고사항:
~
분할 하는 대신 에 인용을 피할 수 있습니다%1~
(%~
결국 매개변수가 필요합니다).1
- 단어 전체를 인용하고 있는데
%(v…)
괄호와 공백만 보호하면 됩니다. - EXTENDED_GLOB를 활성화한 경우에는 따옴표만 필요합니다
#
.%#
- 그 이후의 공백에는
%f
일종의 인용이 필요합니다. 백슬래시를 사용할 수 있지만 편집기에 "표시되는 공백"이 없으면 줄이 이어지는 것처럼 보일 수 있습니다.
답변3
아마도 빠른 답변을 원할 것이므로 여기에 해결책이 있습니다.
PS1=$'\
%F{063}%1\
~\
%f\
%(1v.%F{099}%1v %f.)\
%F{063}\
%#\
%f '
하지만 문자열 내부에는 주석을 달 수 없다는 점에 유의하세요.