3

У меня есть следующее приглашение bash:

YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
RESET='\e[0m'

export PS1="$GREEN[\W]$YELLOW \$(__git_ps1 \"(%s) \")$RESET\\$ "

Это выглядит так:

Что я и хочу. Однако, когда я ввожу длинную строку, она вообще не прерывает строку, а перезаписывает текущую с начала строки. Когда это произойдет, и я нажму клавишу Backspace, все в этой строке исчезнет. Как я могу это исправить?

2 ответа2

3

Вы забыли обернуть значение $RESET .

RESET='\[\e[0m\]'

Bash должен знать, сколько времени требуется для правильной работы переноса слов, и все, что не находится между \[ и \] , считается.

2

Более портативный, используя tput:

fgred="$(tput setaf 1)"
fggreen="$(tput setaf 2)"
fgyellow="$(tput setaf 3)"
fgblue="$(tput setaf 4)"
fgpurple="$(tput setaf 5)"
fgcyan="$(tput setaf 6)"
fgwhite="$(tput setaf 7)"

bgred="$(tput setab 1)"
bggreen="$(tput setab 2)"
bgyellow="$(tput setab 3)"
bgblue="$(tput setab 4)"
bgpurple="$(tput setab 5)"
bgcyan="$(tput setab 6)"
bgwhite="$(tput setab 7)"

bold="$(tput bold)"
underline="$(tput smul)"
reset="$(tput sgr0)"

export PS1="${fggreen}[\W]${fgyellow} \$(__git_ps1 \"(%s) \")${reset}\\$ "

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .