터미널 프롬프트에서 현재 행을 덮어씁니다

터미널 프롬프트에서 현재 행을 덮어씁니다

터미널 프롬프트 라인에 문제가 있습니다. 선이 너무 길면 같은 선으로 엉키게 되어 보기에 Up arrow더 나빠집니다.

나는 확인했다터미널 프롬프트가 올바르게 래핑되지 않습니다., 그러나 인쇄할 수 없는 모든 문자에 대해서는 대괄호를 명확하게 닫은 것 같습니다.

이것은 내 PS1입니다.

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot) }\[\033[01;36m\]\u@\h\[\033[00m\]\033[01;34m\]\w\033[00m\][$(type __git_ps1 >/dev/null 2>&1 && __git_ps1 "(%s)")]

이것을 내 표준 프롬프트 라인으로 간주하십시오.

MELISC@work~/dev/bin_tools[((main))]

나는 얻을 수 있다

assdasdasdasdasdadasdsadadasdaddasdadadasdadsadasdsa((main))] asdsadsadsadsadasdasdassdasdasdassdasdassdasdasdasdasdasdasdsadsad

나는 내 것을 확인했다.bashrc

열이 있고 shopt -s checkwinsize자동으로 확인해야 합니다.

답변1

명령 기록을 표시하고 명령줄을 편집할 수 있기 때문에 Bourne Again 셸의 인쇄 내용과 지우기/다시 작성해야 할 내용에 대한 아이디어를 완전히 비활성화했습니다.

프롬프트를 다음과 같은 섹션으로 나눕니다.

  1. \[\e]0;\u@\h: \w\a\]— 인쇄되지 않는 문자(올바른 대괄호로 묶음)
  2. ${debian_chroot:+($debian_chroot) }- 아마도 문자만 인쇄할 것입니다.
  3. \[\033[01;36m\]— 인쇄되지 않는 문자(올바른 대괄호로 묶음)
  4. \u@\h— 문자만 인쇄
  5. \[\033[00m\]— 인쇄되지 않는 문자(올바른 대괄호로 묶음)
  6. \033[01;34m\]— 인쇄되지 않는 문자, 적절하게 묶이지 않았으므로 Bourne Again 쉘은 그 문자가 무엇인지 알지 못합니다.
  7. \w\033[00m\]— 인쇄 문자와 인쇄되지 않는 문자의 잘못된 혼합
  8. [$(type __git_ps1 >/dev/null 2>&1 && __git_ps1 "(%s)")] - 아마도 문자만 인쇄할 것입니다.

나는 전에 이런 조언을 한 적이 있다., 그러나 일반적인 조언은 여기에도 적용됩니다.

  • 자신의 정신을 위해 다음 중 하나를 사용 \e하거나 지속적으로 사용하십시오.\033
  • 중첩되지 않은 쌍을 엄격하게 일치시키십시오 \[.\]
  • 확실하게 하다모두인쇄되지 않는 시퀀스는 \[and 내에 있습니다. \]반대로 모든 인쇄 시퀀스는 and 내에 있지 않습니다.

(이것이 제가 개인적으로 특이한 색상의 프롬프트를 원할 때 Z Shell과 대체 프롬프트 확장 메커니즘을 선호하는 이유입니다.알다이와 같은 것은 %F{green}따로 설명하지 않고도 시퀀스를 인쇄하지 않습니다. 또한 terminfo직접 연결하지 않고도 올바른 이스케이프 시퀀스를 계산할 수 있습니다. )

답변2

JdeBP의 답변은 매우 훌륭하지만 내 PS1이 이미 적합하므로 나에게 맞는 답변을 추가해야겠다고 생각했습니다. 나는 원래 관련 질문에 이것을 게시했습니다 (2713 화) GitHub의 WSL 저장소:


이 문제가 나를 미치게 만들었기 때문에 나는 후손을 위해 "여기에 없음"을 추가하고 싶었습니다. 나는 마침내 그 이유를 알아냈다고 생각합니다. 적어도 저로서는 이것이 다른 누군가에게 도움이 되기를 바랍니다. 다양한 배포판의 다양한 시스템(빌드 18362 - 18975)에서 이 문제를 확인했습니다. .bashrc의 PS1 구문이 100% 정확하고 인쇄되지 않는 모든 문자가 올바르게 이스케이프되었는지 확인했습니다.

나에게 문제는 콘솔 속성이었습니다. Microsoft Store를 통해 WSL 배포판(Ubuntu, Debian, Kali)을 설치하고 시작 메뉴에서 애플리케이션을 실행했습니다. 내가 이해한 바에 따르면 Linux 브랜드의 클래식 Windows 명령 프롬프트 콘솔에서 WSL이 시작됩니다. (BTW, Shift+오른쪽 클릭/"여기에서 Linux 쉘 열기"를 사용하여 폴더에서 시작하면 동일한 콘솔 창이 열립니다).

두 경우 모두 생성된 콘솔 제목 표시줄을 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭한 다음 "크기 조정 시 텍스트 출력 줄바꿈" 옵션을 선택하면 문제가 해결된다는 점입니다.

콘솔 속성

텍스트 감싸기

이제 다음 줄로 넘어가는 명령을 올바르게 입력할 수 있고 커서를 적절하게 이동할 수 있습니다. 어딘가에 버그가 있는 게 틀림없지만, 어디에서 문제가 발생하는지 모르겠습니다.

관련 정보