Bash 프롬프트의 256비트 색상 코드 문제

Bash 프롬프트의 256비트 색상 코드 문제

이것은 제가 사용하고 있는 bash 프롬프트입니다.ANSI 이스케이프 시퀀스

reset="\033[0m";
blue="\033[38;5;20m";
cyan="\033[38;5;38m";
green="\033[38;5;35m";
yellow="\033[38;5;227m";
white="\033[38;5;250m";

# Set the terminal title to the current working directory.
PS1="\[\033]0;\w\007\]";
PS1+="\[${yellow}\]\u"; # username
PS1+="\[${white}\]@";
PS1+="\[${green}\]\h"; # host
PS1+="\[${white}\]:";
PS1+="\[${cyan}\]\W"; # working directory
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color)
export PS1;

보기엔 좋아 보이지만 가끔 터미널에서 프롬프트 길이를 계산하는 데 문제가 있는 것 같습니다. 이는 OSX에서 로컬로 발생하고 SSH를 통해(OSX에서는 및 Windows에서는 PuTTY를 통해) Ubuntu 서버에 연결할 때 모두 발생합니다.

예를 들어 이런 일이 발생합니다. 먼저 "git add [filename]"을 입력하고 탭 완성을 사용한 다음 "Home" 키를 눌러 이전 줄로 돌아가 "git add"를 "vi"로 바꿨습니다. 보시다시피 매우 혼란스럽습니다.

여기에 이미지 설명을 입력하세요.

또한 줄 끝으로 이동하기 위해 "끝"을 클릭하면 몇 개의 공백이 있는 ".php"를 지나게 됩니다.

여기에 이미지 설명을 입력하세요.

이는 새 줄을 편집할 때와 기록에서 줄을 편집할 때 모두 발생합니다(위쪽 화살표 사용. 올바르게 표시되지만 화살표 키나 Home/End를 사용하자마자 엉망이 됩니다).

Ctrl+L을 눌러 지워도 문제가 해결되지 않습니다. 기본적으로 문제를 피하려면 처음부터 다시 시작하여 전체 줄을 다시 입력해야 합니다.

답변1

이 줄

PS1+="\$(prompt_git \"${blue}\")"; # Git repository details

포함된 각 문자의 열 수를 계산하지 않도록 지시하는 bash 사용 \[및 플래그 는 없습니다 . \]달리 명시하지 않으면 인쇄 가능한 문자도 계산되는 것으로 간주됩니다.

토론을 위해:

관련 정보