창이 너무 좁은 경우 zsh 프롬프트가 위쪽으로 이동하는 이유는 무엇입니까?

창이 너무 좁은 경우 zsh 프롬프트가 위쪽으로 이동하는 이유는 무엇입니까?

zsh와 urxvt(?)의 조합인 것처럼 보이는 이상한 동작이 있습니다. 내 설정은 다음과 같습니다. 기본 셸로 urxvt -e 'tmux'실행되는 터미널을 가져오기 시작합니다.zsh

그런 다음 내 사용자 정의를 시작했는데 $PROMPT현재는 다음과 같습니다.

 zstyle ':vcs_info:*' enable git svn hg bzr
 zstyle ':vcs_info:*' formats $' \e[0;33m(%s:%b)\e[0m'
 precmd () { vcs_info }
 PROMPT+=$'\e[0;31m%n\e[0m'
 PROMPT+="@"
 PROMPT+=$'\e[0;34m%m\e[0m'
 PROMPT+=":"
 PROMPT+=$'\e[0;36m%3c\e[0m'
 PROMPT+=$'\e[0;33m%c\e[0m'
 PROMPT+='${vcs_info_msg_0_}'
 export PROMPT

%c두 번째 줄은 물론 테스트용이라는 것을 알 수 있습니다 .

프롬프트의 일반적인 동작은 Enter 키를 누른 후 새 줄을 만들고 선택적으로 존재할 수 있는 명령을 실행하는 것입니다. 새로운 라인이 인쇄됩니다. 그러나 특정 상황에서는 다른 동작을 발견했습니다. Enter 키를 누르면 명령이 실행되고 출력이 표시됩니다.하지만, 이전 프롬프트가 터미널 상단에 있지 않은 경우 전체 새 출력이 한 줄 위로 이동하기 때문에 이전 출력의 마지막 줄을 덮어씁니다.

아마도 예가 필요할 것입니다. 빈 터미널과 새로운 프롬프트로 시작하세요:

user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)

이제 이 디렉터리에 입력합니다 ls -la(샘플 출력).

user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)

실제로 .git여기에 디렉터리가 있으므로 뭔가 누락된 부분이 있는지 확인하세요.

drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .git

여기서 발생한 상황은 쉽게 설명됩니다. 명령 출력이 올바르게 생성되었지만 프롬프트 줄이 한 줄 위로 이동하여 출력의 마지막 줄을 덮어씁니다. 따라서 동일한 작업을 다시 수행하면 출력은 다음과 같습니다.

user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)

보시다시피 모든 것이 다시 한 번 위로 이동되었습니다. 이번에는 ..마지막 출력의 와 .git이 출력의 를 교체했습니다.

하지만 모든 설정에서 이런 일이 발생하는 것은 아닙니다. 창이 너무 좁은 경우에만 발생합니다. 또한 내부에 zsh가 포함된 열려 있는 urxvt 창의 크기를 조정하여 이를 테스트했습니다. 너무 좁게 만들면. 내가 보기에 프롬프트가 창 너비의 약 2/3를 차지하면 시작됩니다. 그러나 나는 모른다이번 기회에 이런 일이 일어납니다.

일부 참고 사항: - Bash에서는 발생하지 않습니다(프롬프트 자체가 여러 줄인 경우에도) - RPROMPT그리고 RPROMPT2비어 있습니다. - 표시되는 정보 유형에 의존하지 않는 것 같습니다(예: 비활성화하면 vcs_info프롬프트가 다시 충분히 짧아지는 경우에만 도움이 됩니다) - 프롬프트가 여러 줄이면 발생하지 않습니다(두 번째 줄이 2/3 표시에 도달하지 않음). 콘솔(tty)에서는 발생하지 않지만 xterm에서는 발생합니다.그리고urxvt.

요약: 프롬프트 줄이 창 길이의 약 2/3인 경우 줄이 위로 올라갈 때 내 zsh 프롬프트가 이동합니다.

답변1

%{fg[color]%}bash 색상 코드 대신 사용하여 문제를 해결한 것 같습니다 (물론 이를 위해서는 색상 모듈을 로드해야 합니다).

관련 정보