Aqui está meu prompt do bash; estou a usarSequências de 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;
Parece fantástico, mas às vezes o terminal parece ter problemas para calcular a duração do prompt. Isso acontece localmente no OSX e durante o SSH em um servidor Ubuntu (no OSX e no Windows por meio do PuTTY)
Por exemplo, isso acontece. Primeiro digitei "git add [nome do arquivo]" com conclusão da guia, depois apertei a tecla "Home" para voltar ao início da linha e substituí "git add" por "vi". Como você pode ver, está bastante confuso.
Além disso, se eu clicar em "Fim" para chegar ao final da linha, passarei do ".php" com vários espaços em branco.
Isso acontece tanto ao editar uma nova linha quanto ao editar uma linha no meu histórico (usando a seta para cima. Ele é exibido corretamente, mas assim que eu uso as teclas de seta ou Home/End ele bagunça)
Pressione Ctrl + L para limpar, não resolve, basicamente tenho que começar de novo e redigitar a linha inteira para evitar problemas.
Responder1
Está linha
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
não possui os marcadores \[
e \]
usados pelo bash para instruí-lo a não contar colunas para cada caractere incluído. Se não for informado o contrário, assume que os caracteres imprimíveis devem ser contados.
Para discussão:
- 3.4. Caracteres não imprimíveis em prompts(Como fazer o prompt do Bash)
- Mudando cores(manual xterm)