프롬프트의 기호가 손상되는 원인은 무엇입니까? 어딘가로 탈출할 기회를 놓친 것 같아

프롬프트의 기호가 손상되는 원인은 무엇입니까? 어딘가로 탈출할 기회를 놓친 것 같아

터미널 프롬프트와 vim 인스턴스의 가장 낮은 부분에 "깨진" 기호가 표시됩니다. 이것은 일종의 색상 코드 참조인 것 같지만 어디서 나온 것인지 알 수 없습니다.

parse_git_branch()온라인에서 및 기능을 찾았습니다 strip_colors(). PS1 설정 자체는 다음 중 하나에서 생성됩니다.

https://scriptim.github.io/bash-prompt-generator/

http://ezprompt.net/

나는 bash에서 "별로 좋지 않다"는 것을 분명히 하기 위해 이것을 말하는 것입니다 :p

해결 방법에 대한 조언이 있습니까? 미리 감사드립니다!

빠르게

프롬프트에 "손상됨" 기호가 나타납니다.

정력

또한 vim 디스플레이의 가장 낮은 부분에도 있습니다.

force_color_prompt=yes

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

strip_colors() {
    sed 's/\\[eE][[0-9]*;[0-9]*m//g' <<< $PS1
    # You can use it like this
    #     PS1="..."
    #     export PS1=$(strip_colors)
}

if [ "$color_prompt" = yes ]; then
    ...
    # green with 'default' text colors
    PS1="\n\[\e[32m\](\[\e[0m\]\u\[\e[32m\])(\[\e[0m\]jobs:\j\[\e[32m\])(\[\e[0m\]\w\[\e[32m\])\$(parse_git_branch)\[\033[00m\]\n\[\e[0m\]\$ "

else
    PS1="\n\[\e[32m\](\[\e[0m\]\u\[\e[32m\])(\[\e[0m\]jobs:\j\[\e[32m\])(\[\e[0m\]\w\[\e[32m\])\$(parse_git_branch)\[\033[00m\]\n\[\e[0m\]\$ "
    export PS1=$(strip_colors)
fi
unset color_prompt force_color_prompt

답변1

@Quasimodo와 @JdeBP에게 감사드립니다!

해당 기능을 제거 strip_colors()하고 parse_git_branch()다음 기능으로 대체했습니다. 그 이후로 아무런 문제가 없었습니다.

# get current branch in git repo, from ezprompt.net
function parse_git_branch() {
    BRANCH=`git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
    if [ ! "${BRANCH}" == "" ]
    then
        STAT=`parse_git_dirty`
        echo "[${BRANCH}${STAT}]"
    else
        echo ""
    fi
}

# get current status of git repo
function parse_git_dirty {
    status=`git status 2>&1 | tee`
    dirty=`echo -n "${status}" 2> /dev/null | grep "modified:" &> /dev/null; echo "$?"`
    untracked=`echo -n "${status}" 2> /dev/null | grep "Untracked files" &> /dev/null; echo "$?"`
    ahead=`echo -n "${status}" 2> /dev/null | grep "Your branch is ahead of" &> /dev/null; echo "$?"`
    newfile=`echo -n "${status}" 2> /dev/null | grep "new file:" &> /dev/null; echo "$?"`
    renamed=`echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?"`
    deleted=`echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?"`
    bits=''
    if [ "${renamed}" == "0" ]; then
        bits=">${bits}"
    fi
    if [ "${ahead}" == "0" ]; then
        bits="*${bits}"
    fi
    if [ "${newfile}" == "0" ]; then
        bits="+${bits}"
    fi
    if [ "${untracked}" == "0" ]; then
        bits="?${bits}"
    fi
    if [ "${deleted}" == "0" ]; then
        bits="x${bits}"
    fi
    if [ "${dirty}" == "0" ]; then
        bits="!${bits}"
    fi
    if [ ! "${bits}" == "" ]; then
        echo " ${bits}"
    else
        echo ""
    fi
}

# Use like:
# export PS1="\`parse_git_branch\` "

관련 정보