Zsh: 대화형 모드에서 여러 줄 문을 작성할 때 블록 접두사를 제거하는 방법은 무엇입니까?

Zsh: 대화형 모드에서 여러 줄 문을 작성할 때 블록 접두사를 제거하는 방법은 무엇입니까?

대화형 모드에서 Zsh에 여러 줄 문을 작성할 때 다음과 같이 내가 속한 블록 유형을 내 문 앞에 추가합니다.

% for i in $(seq 3); do
for> echo $i
for> done
1
2
3
% function foo() {
function> echo bar
function> }
% foo
bar

나는 다른 코드 블록 접두사를 보는 for>것을 좋아하지 않습니다 . function>이러한 접두사를 억제하는 방법을 적절하게 검색하기 위해 이러한 접두사가 무엇인지 잘 모르겠습니다. Bash는 또한 문자만을 사용하여 이 작업을 수행 >하지만 이 경로에서는 알아낼 수 있는 행운이 없었습니다. Zsh에서 이를 비활성화하는 방법이 있습니까?

- 편집하다 -

어느 날 검색 엔진을 통해 이 문제에 직면한 사람을 위해 $PS2Zsh의 기본값은 입니다 . PS2=%_>~에서문서:

%_

파서의 상태, 즉 명령줄에서 시작된 셸 구성(예: "if" 및 "for")입니다. 정수가 주어지면 많은 문자열이 인쇄됩니다. 0 또는 음수 또는 정수가 없으면 가능한 많은 값을 인쇄한다는 의미입니다. 이는 연속 라인을 위해 PS2를 프롬프트하고 XTRACE 옵션을 사용하여 디버깅을 위해 PS4를 프롬프트할 때 가장 유용합니다. 후자의 경우 비대화식으로도 작동합니다.

승인된 답변을 바탕으로 저는 다음과 같은 PS2 설정을 마쳤습니다. 각 블록에 2칸 들여쓰기를 추가하고 PS1 길이에 맞춰 초기 2칸을 차지합니다.

PS2='${${${(%):-%_}//[^ ]}// /  }    '

답변1

PS2이는 모든 Bourne 스타일 셸(zsh 포함)의 변수를 통해 구성된 두 번째 프롬프트입니다.zsh에서, 기본적으로 어떤 쉘 구조(루프, 따옴표 등)가 열려 있는지 표시합니다.%_ 빨리 탈출해라.배쉬에서, 기본값은 >이스케이프 시퀀스를 사용할 수 있습니다하지만 그다지 유용하지는 않습니다.

도우미 프롬프트를 원하지 않으면 공백으로 두십시오.

PS2=

prompt_subst옵션을 활성화하면 각 중첩 수준에 공백이 생기도록 할 수 있으며, 이는 시각적 피드백을 제공하지만 터미널에서 코드를 복사할 수 있게 해줍니다.

setopt prompt_subst
PS2='${${(%):-%_}//[^ ]} '

관련 정보