저는 bash에서 PS1과 PROMPT_COMMAND를 사용하여 zsh 스타일에 맞는 프롬프트를 생성하고 있습니다. 해결책이 있어요거의일하다.
문제는 긴 입력 줄을 쓰면 두 번째 줄이 첫 번째 줄을 덮어쓴다는 것입니다. 세 번째 줄은 새 줄에 멋지게 표시됩니다.
커서 이동으로 인해 일부 행 카운터가 1씩 감소할 수 있습니까? 아니면 이것이 제한 사항/버그입니까?
간단한 예:
export PS1="prompt>\[\033[s\033[10C\]test\[\033[u\]"
인쇄 prompt>
, 위치 저장, 왼쪽으로 10자 이동, 인쇄 test
, 위치 복원.
프롬프트는 좋아 보였고 두 줄 이상의 텍스트를 작성할 때까지 완벽하게 작동했습니다.
예 1, 예상되는 동작:
------------------------------------
prompt> test
prompt>ls test
files...
prompt>1 2 3 4 5 6 7 8 9 10 11 12 13
14 15 16 17 18 19 20 21 22 23 24 25
26 27 28
예 2, 현재 동작:
------------------------------------
prompt> test
prompt>ls test
files...
14 15 16 17 18 19 20 21 22 23 24 253
26 27 28
답변1
아, 물론이죠. 테스트는 보이는 문자로 처리되어서는 안 되며 \[
와 사이에 포함되어야 합니다 \]
.
실제 사례:
export PS1="prompt>\[\033[s\033[10Ctest\033[u\]"
그 이유는 bash가 test를 보이는 문자로 계산하는 경우 커서 계산과 현재 행에서 사용 가능한 나머지 문자가 4자("test"의 길이)만큼 어긋나면 떠났다고 가정하기 때문입니다.