터미널 다시 그리기 문제를 일으키지 않고 zsh 프롬프트에 줄 바꿈을 어떻게 넣을 수 있습니까?


12

내 zsh 프롬프트에서 사소한 (그러나 성가신) 문제를 해결하려고합니다. 내가보고있는 문제는 GUI OS 환경에서 터미널을 사용하고 (예 : OS X 10.7.2의 Terminal.app 또는 iTerm 2) 터미널 창의 크기를 조정할 때 터미널이 추가 프롬프트로 다시 그려지는 것입니다 .

다음을 포함하는 깨끗한 .zshrc에서 문제를 재현했습니다.

export PROMPT=">
"

분명히, 그것은 두 줄짜리 파일입니다. 나는 몇 가지 (에 읽은 문자열의 문자 줄 바꿈이 인정 하듯이 된 ) 장소 이동하는 방법입니다. 이것은 터미널 창의 크기를 조정할 때까지 작동하며 그 시점에서 중복 프롬프트 문자열로 끝납니다. 예를 들어 새 창을 열면 *커서에 자리 표시자가 사용됩니다.

Last login: Wed Jan 25 19:05:06 on ttys000
>
*

그런 다음 창 크기를 조정하여 더 짧게 만들면 다음과 같이 끝납니다.

Last login: Wed Jan 25 19:05:06 on ttys000
>
>
>
>
*

추가 프롬프트 인쇄물 수는 창 크기를 변경하는 정도 (보통 세로)에 대략 비례하는 것으로 보입니다. 프롬프트 문자열에서 줄 바꿈을 제거하면 문제가 해결됩니다.

와 같은 다양한 작업을 시도 $(print ">\n")했거나에서 개행을 줄이려고했습니다 %{%}. 나는 이것이 개행이 프롬프트 문자열이 실제로 얼마나 오래 걸리는지를 혼란스럽게한다는 사실과 관련이 있다고 가정합니다. 이 문제는 고칠 수 있습니까 아니면 그냥 살아야합니까?

답변:


13

이 문제는 ZSH가 크기 조정 이벤트에서 프롬 트를 다시 인쇄하는 방법 때문이며 이전에도 저를 괴롭 혔습니다. 해결책은 $PROMPTprecmd를 사용하여 단일 행을 만들고 프롬프트의 첫 번째 행을 인쇄하는 것입니다.

따라서 귀하의 예에서 간단히 다음과 같습니다.

precmd() { print ">" }
export PROMPT=""

또는 print 문에서 프롬프트가 확장 된보다 정교한 예제의 경우 -rP매개 변수를 사용하십시오 .

precmd() { print -rP "%~" }
export PROMPT="%# "

둘 이상의 precmd가 등록 된 경우 사용해야합니다 add-zsh-hook precmd(참조 man zshcontrib).


1
: 자신과 같은 초보자를 위해, 당신은 무엇 -RP 수단 여기에서 볼 수 있습니다 cs.elte.hu/zsh-manual/zsh_17.html을 . 그가 나타납니다 printzsh을 특정 명령, 그리고 인터넷 검색은 "리눅스 인쇄"당신에게 아주 좋은 결과를 제공하지 않습니다.
MikeWyatt

printzsh의 일부입니다. 에서 도움말을 볼 수 있습니다 man zshbuiltins. Bash에는 자체 동등한 기능이 있지만 호환되는지 확실하지 않습니다.
Jim Stewart

10

이런 식으로 어떻습니까 :

NEWLINE=$'\n'
PROMPT="Line1${NEWLINE}LINE2"

나는이 해결책이 허용되는 대답보다 낫습니다. 그것은 휴대 성, 그리고 내 zsh을 배쉬 환경과 같은 스크립트를 유지할 수 있습니다
verboze
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.