Bash 프롬프트는 긴 줄을 감싸지 않습니다. 모든 것이 이스케이프되었다고 가정합니까?

Bash 프롬프트는 긴 줄을 감싸지 않습니다. 모든 것이 이스케이프되었다고 가정합니까?

이 내 꺼야.bash_profile

export CLICOLOR=1
export LSCOLORS=exfxcxdxbxegedabagacad

# define colors
C_DEFAULT="\[\033[m\]"
C_WHITE="\[\033[1m\]"
C_BLACK="\[\033[30m\]"
C_RED="\[\033[31m\]"
C_GREEN="\[\033[32m\]"
C_YELLOW="\[\033[33m\]"
C_BLUE="\[\033[34m\]"
C_PURPLE="\[\033[35m\]"
C_CYAN="\[\033[36m\]"
C_LIGHTGRAY="\[\033[37m\]"
C_DARKGRAY="\[\033[1;30m\]"
C_LIGHTRED="\[\033[1;31m\]"
C_LIGHTGREEN="\[\033[1;32m\]"
C_LIGHTYELLOW="\[\033[1;33m\]"
C_LIGHTBLUE="\[\033[1;34m\]"
C_LIGHTPURPLE="\[\033[1;35m\]"
C_LIGHTCYAN="\[\033[1;36m\]"
C_BG_BLACK="\[\033[40m\]"
C_BG_RED="\[\033[41m\]"
C_BG_GREEN="\[\033[42m\]"
C_BG_YELLOW="\[\033[43m\]"
C_BG_BLUE="\[\033[44m\]"
C_BG_PURPLE="\[\033[45m\]"
C_BG_CYAN="\[\033[46m\]"
C_BG_LIGHTGRAY="\[\033[47m\]"

# Prompt
if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fi

source $(brew --prefix)/etc/bash_completion.d/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true

# PS1="\h:\W \u\$(__git_ps1 \" (%s) \")\$"
PS1="$C_YELLOW\w $C_PURPLE\$(__git_ps1 \"(%s) \")$C_DEFAULT\n ☠️   "

긴 줄을 입력/복사하여 붙여넣을 때 새 줄로 넘어가지 않습니다. 대신 기존 항목을 덮어씁니다. 처음으로 돌아가도 모든 문자가 삭제되지는 않습니다.

다른 답변 중 일부를 살펴보니 모두 포장이 문제일 수 있다고 제안했지만 모든 것이 올바르게 포장된 것 같나요?

답변1

** 크리스토퍼의 답변으로 문제가 해결되지 않으면...

모든\[이스케이프 코드는 및 으로 묶어야 합니다 \]. 하나 또는 일치하지 않는 쌍을 놓치면 지금 보고 있는 것과 같은 문제가 발생할 수 있습니다. 내용이 무엇인지 모르기 __git_ps1때문에 무엇이 잘못되었는지 말하기가 어렵습니다.

여전히 문제가 해결되지 않으면 여기에 약간의 "디버깅 팁"이 있습니다. :) 프롬프트를 텍스트 파일에 덤프하고 에서 실행하면 이 작업을 수행할 수 있습니다 vi. 이렇게 하면 아무것도 렌더링되지 않고 실제 문자를 볼 수 있습니다( echo $PS1예를 들어 명령줄에서 수행하는 것과 비교).

echo $PS1 > ps1
vi ps1

코드가 많을 경우 :%s/\\[//n괄호 개수가 일치하는지 입력한 후 확인 하시면 됩니다 :%s/\\]//n. 이렇게 하면 이스케이프된 대괄호를 열고 닫는 횟수가 제공됩니다. 최소한 두 수가 동일한지 확인하여 짝이 없는 대괄호를 배제할 수 있습니다. (나는 상당히 복잡한 프롬프트를 가지고 있고 불일치 오류로 인해 여러 번 어려움을 겪었습니다!)

아직도 알 수 없나요? 우리가 검사할 수 있도록 이 파일의 내용을 여기에 복사하세요.

답변2

BASH는 모든 문자(인쇄 가능 여부)를 프롬프트 길이로 계산합니다. 계산된 프롬프트 길이에 따라 줄 바꿈이 발생하는 위치가 결정됩니다. 계산된 길이는 변경해야 하는 변수입니다. ☠️ 뒤에 공백을 제거하고 다른 공백을 추가하면 \[ \]BASH는 macOS High Sierra, BASH 4.4.12 및 iTerm 3.1.4를 사용하는 현재 컴퓨터에서 개행 위치를 올바르게 계산합니다.

PS1="$C_YELLOW\w $C_PURPLE\$(__git_ps1 \"(%s) \")$C_DEFAULT\n☠️\[ \]"

관련 정보