zsh에서 보조 프롬프트 비활성화

zsh에서 보조 프롬프트 비활성화

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평소와 같이 실행됩니다. 그렇지 않으면 개행 문자가 삽입됩니다.

면책조항: 저는 이 플러그인의 작성자입니다.

관련 정보