ZSH가 강조 표시된 백분율 기호로 줄을 끝내는 이유는 무엇입니까? 이와 비슷한 것으로 zz가 줄 바꿈

나는 때때로 다양한 응용 프로그램에서 이것을 발견했습니다. 출력이 일찍 취소 (예 : Ctrl + C) 또는 이와 비슷한 것으로 zz가 줄 바꿈 문자를 채우고 있기 때문에 종종 생각했습니다. 그러나 지금은 호기심이 최선을 얻었습니다. 왜냐하면 그것이 bash에서 이것을하지 않는 것 같습니다.

zsh

세게 때리다

Sequence프로그램은 Java 인증을 읽는 동안 책에서 가져온 것으로 컴파일 및 실행 여부를 확인하고 싶었습니다. 패키지 / 클래스 의 println()메소드를 사용하지 않는다는 것을 알았습니다 System.out. 대신 일반을 사용합니다 print().

줄 바꾸기 문자가없는 것이이 기호를 얻는 이유입니까?



답변

예, 이것은 “부분 라인”이기 때문에 발생합니다. 그리고 기본적으로 zsh는 다음 줄로 이동하여 프롬프트로 덮지 않습니다 .

부분 줄이 유지되면 기본적으로 부분 줄 끝에 역 + 굵은 문자가 표시됩니다. 일반 사용자의 경우 “%”또는 루트의 경우 “#”입니다. 설정된 경우 쉘 매개 변수 PROMPT_EOL_MARK를 사용하여 부분 라인의 끝 표시 방법을 사용자 정의 할 수 있습니다.


답변

즉 특정 기능의 zsh(그리고 지금 fish당신이 명확하게 명령의 출력에서 종결되지 않은 줄을 볼 수 있도록뿐만 아니라).

이 터미널 커서를 떠나면 전통적인 쉘에서 명령은, 즉, 마지막 개행 문자 후 일부 데이터를 출력하는 경우, 또는 하지 라인, 마지막 종료되지 않은 줄에 추가까지 쉘 끝으로 다음 프롬프트의 시작 에서와 같이 :

bash-4.4$ printf XXX
XXXbash-4.4$

그것은 프롬프트를 엉망으로 만들며, XXX특히 당신이 그런 더 멋진 프롬프트를 가지고 있다면 그것을 놓치기 쉽습니다 . 또한 커서 위치에 영향을 미치므로 커서를 움직일 때 디스플레이 결함이 발생합니다.

zsh출력 %에 굵은 체와 반전 된 비디오 의 문자 가있는 종료되지 않은 행이 있음을 보여주고 다음 행의 시작 부분에 다음 프롬프트를 표시합니다.

zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$

모든 명령 %이 끝날 (각 프롬프트 전에) 리버스 비디오 를 출력 하지만 79 개의 공백 (80 자 너비의 터미널로 가정), CR 문자 (커서가 첫 번째 커서로 돌아가는 문자) 열) 및 줄 끝까지 지우는 순서 (및 프롬프트).

이렇게하면 종료되지 않은 행이있는 경우 커서가 첫 번째 위치에 있지 않기 때문에이 80자를 사용하면 커서가 다음 행으로 이동합니다 (그리고 %계속 유지됨). 그렇지 않다면, 그 %공간과 그 79 개의 공간은 한 줄에있게되고 나중에 삭제 될 것입니다.

이제 터미널이 줄 바꿈을 수행하는 경우에만 작동합니다 (예 : 이후에 제대로 작동하지 않음 tput rmam). 속도가 느린 터미널 (예 : 9600 보드 직렬 회선)이있는 경우 실제로 %각 명령 후에 표시되고 제거 된 것을 볼 zsh수 있으므로 해당 기능을 비활성화 할 수 있습니다.

unsetopt prompt_cr prompt_sp

그렇게하면 zsh전통적인 껍질과 비슷하게 행동합니다.

$PROMPT_EOL_MARK변수를 사용하여 해당 마크를 변경할 수도 있습니다 .