Исправление исторического повреждения командной строки из escape-последовательности PS1 - PullRequest
0 голосов
/ 22 ноября 2018

Я (полагаю), у меня проблема с следующей PS1, неправильно имеющей escape-последовательность:

\ x1b [35mabc \ x1b [0m \ x1b [33mxyz \ x1b [0m \ x1b [34m \]w \ x1b [0m \ $

Приглашение выглядит нормально, пока я не начну использовать исторические командные строки, а затем bash, похоже, теряет то место, где находится начало строки.Я думал, что этот вопрос переполнения стека поможет, но я действительно не знаю, где отсутствует моя escape-последовательность.Это то, что мне не хватает закрывающих скобок?Кроме того, я немного запутался, почему вместо \.

у меня есть \ x1b * Пожалуйста, помогите!

1 Ответ

0 голосов
/ 22 ноября 2018

Вы полностью пропустили скобки (как открывающие, так и закрывающие).Попробуйте использовать

\\[\x1b[35m\\]abc\\[\x1b[0m\\] \\[\x1b[33m\\]xyz\\[\x1b[0m\\] \\[\x1b[34m\\]\w\\[\x1b[0m\\]\$

То есть поместите \\[ и \\] вокруг каждую escape-последовательность в приглашении.

Мое личное решение - использовать двастрока-строка (так что в PS1 есть \ n), где вторая строка короткая и не имеет выходов.Таким образом, у bash нет проблем с определением ширины:

PS1='\033[0;31m[\h${debian_chroot:+($debian_chroot)}] \033[0;32m[\u] \033[0;33m[\w$(__git_ps1 " (%s)")]\033[0;39m\n --> '
...