Enter를 누르기 전에 zsh에서 인용되거나 복잡한 명령을 올바르게 완료하지 않으면 PS2에서 정의한 보조 프롬프트(예: )를 사용하여 완료하라는 메시지가 표시됩니다 >
.
지원 프롬프트를 비활성화하는 방법이 있습니까? PS2 설정을 변경하는 것이 아니라 전체 기능을 끄는 것을 의미합니다. 옵션 중 하나를 찾을 수 없습니다.
실제로 명령을 계속하려는 것보다 내 실수로 인해 두 번째 프롬프트가 나타날 가능성이 더 높습니다. 따라서 구문 오류는 보조 프롬프트보다 더 유용합니다. 특히 보조 프롬프트가 나타날 때 원래 줄로 즉시 돌아갈 수 없기 때문입니다.
(여러 줄 명령을 입력해야 하는 경우 Shift+Enter를 사용하여 새 줄을 삽입할 수 있습니다. 보조 프롬프트와 달리 zsh 줄 편집기에서는 이 경우 이전 줄로 돌아갈 수 있습니다.)
답변1
이 작업을 수행하는 더 깨끗하고 안정적인 방법이 있을 수 있지만 해커로서 다음과 같이 할 수 있습니다.
accept-line() {
{
unfunction _al_f_
functions[_al_f_]=$BUFFER
} 2> /dev/null
if (( $+functions[_al_f_] )); then
zle .$WIDGET
else
zle beep
zle -M "Command unfinished or invalid."
fi
}
zle -N accept-line
(필요하다면 행을 허용하는 다른 위젯에 대해 이것을 반복하십시오).
즉, 위에서는 accept-line
편집 버퍼를 본문으로 사용하는 함수를 정의해 보고, 실패할 경우 해당 행을 수락하는 대신 사용자에게 오류를 보고합니다.
별칭은 에 할당될 때 확장되지 않으므로 functions[_al_f_]
구문을 수정하는 별칭(예: a )이 있는 경우 alias not_before=until
문제가 발생합니다.
답변2
지원 프롬프트를 비활성화하는 zsh 플러그인이 있습니다:https://github.com/romkatv/zsh-no-ps2. 현재 입력한 명령의 형식이 올바른 경우 Enter평소와 같이 실행됩니다. 그렇지 않으면 개행 문자가 삽입됩니다.
면책조항: 저는 이 플러그인의 작성자입니다.