Вот моя командная строка 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 для указания не подсчитывать столбцы для каждого заключенного символа. Если не указано иное, предполагается, что следует подсчитывать печатные символы.
Для обсуждения:
- 3.4 Непечатаемые символы в подсказках(HOWTO по командной строке Bash)
- Изменение цвета(руководство по xterm)