Prompt: A linha é excluída ao alternar entre os comandos [duplicado]

2

Eu tentei mudar o meu prompt para minhas próprias preferências, mas quando eu estou mudando os comandos que eu inseri recentemente (com setas de tecla), às vezes a linha inteira com o prompt é excluída apenas alguns caracteres do prompt com o caracteres do comando que entrei recentemente permanecem:

Resultado esperado:

bucky in [~]: cd ..

Saída:

buccd ..

'buc' é parte do prompt, 'cd ..' é um comando que eu digitei recentemente.

Meu prompt:

PS1="\[3[0;34m\u\] \[3[0;37min\] \[3[1;32m[\]\[3[0;31m\w\]\[3[1;32m]\]\[3[0;37m:\] "

Para lhe dar uma visualização, aqui está uma imagem:

Se necessário, estou usando o Ubuntu 16.04

    
por Uuser 30.08.2016 / 22:22

3 respostas

4

Isso ocorre porque as partes de impressão do prompt \u in \w e : estão em colchetes com escape. Os colchetes são normalmente colocados ao redor de caracteres não imprimíveis para dizer ao bash para não mover o cursor para eles e assim calcular corretamente o tamanho do prompt. Então agora o cursor não está sendo movido corretamente para as seções de impressão.

Recomendo que você modifique as partes do seu .bashrc que definem o prompt em vez de substituí-lo ... você pode remover o comentário (remover o # ) desta linha:

#force_color_prompt=yes

e, em seguida, modifique a segunda linha neste snippet:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

então diz:

PS1='${debian_chroot:+($debian_chroot)}\[3[00;34m\]\u \[3[0;37m\]in \[3[01;32m\][\[3[0;31m\]\w\[3[1;32m\]]\[3[0;37m\]: '

Ou se preferir, basta colocar sua substituição no final do arquivo:

PS1='\[3[00;34m\]\u \[3[0;37m\]in \[3[01;32m\][\[3[0;31m\]\w\[3[1;32m\]]\[3[0;37m\]: '

Isso alcança o que eu acho que você quer para mim no Ubuntu 16.04 e não quebra a maneira como você descreve (o que eu também experimentei antes ao jogar com meu PS1!)

    
por 30.08.2016 / 23:27
0

Uso errado de colchetes ao quadrado.

PS1="\[3[0;34m\]\u \[3[0;37m\]in \[3[1;32m\][\[3[0;31m\]\w\[3[1;32m\]]\[3[0;37m\]: "
    
por 30.08.2016 / 23:12
0

Foram os suportes que estavam bagunçando você. Em particular, o un-escaped "[" no início do diretório de trabalho. "[\ w" Tente isto:

PS1="3[0;34m\u 3[1;32m\[[3[0;31m\w3[1;32m]3[0;37m: "

Ele faz exatamente o que você quer no meu terminal.

    
por 30.08.2016 / 23:46