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에서 로컬로 발생하고 Ubuntu 서버에 SSH로 연결할 때(OSX 및 Windows에서 PuTTY를 통해) 발생합니다.

예를 들어 이런 일이 발생합니다. 먼저 탭 완성과 함께 "git add [filename]"을 입력한 다음 "Home" 키를 눌러 줄 맨 앞으로 돌아가 "git add"를 "vi"로 바꿉니다. 보시다시피 꽤 엉망입니다.

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

또한 줄의 끝 부분에 도달하기 위해 "End"를 누르면 몇 개의 공백이 있는 ".php"를 지나게 됩니다.

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

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

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

답변1

이 줄

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

포함된 각 문자에 대한 열을 계산하지 않도록 bash에서 사용하는 \[및 마커가 없습니다 . \]달리 명시하지 않으면 인쇄 가능한 문자를 계산해야 한다고 가정합니다.

토론을 위해:

관련 정보