проблема с 256-битными цветовыми кодами в командной строке bash

проблема с 256-битными цветовыми кодами в командной строке bash

Вот моя командная строка bash; я используюEscape-последовательности 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, так и при SSH-подключении к серверу Ubuntu (на OSX и на Windows через PuTTY)

Например, происходит следующее. Сначала я набрал "git add [имя_файла]" с автодополнением Tab, затем нажал клавишу "Home", чтобы вернуться в начало строки, и заменил "git add" на "vi". Как видите, все довольно запутано.

введите описание изображения здесь

Кроме того, если я затем нажму «End», чтобы перейти к концу строки, то меня перенесет далеко за «.php» с несколькими пробелами.

введите описание изображения здесь

Это происходит как при редактировании новой строки, так и при редактировании строки в моей истории (с помощью стрелки вверх. Отображается правильно, но как только я использую клавиши со стрелками или Home/End, все портится)

Нажмите Ctrl+L, чтобы очистить, но это не исправит ситуацию. Мне по сути приходится начинать заново и перепечатывать всю строку, чтобы избежать проблем.

решение1

Эта линия

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

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

Для обсуждения:

Связанный контент