Comportamento estranho no Terminal com personalizado .bash_profile

8

É difícil descrever o comportamento, mas aqui está um pequeno clipe:

http://www.youtube.com/watch?v=9KqHBA94FPI

Basicamente, ao digitar comandos de várias linhas, no final da primeira linha, o bloco de inserção volta ao início da primeira linha, escreve sobre a primeira linha e continua como normal nas segunda, terceira, etc. linhas . Ao excluir, ele permite excluir o comando inteiro, além dos espaços em branco na linha acima do comando (eu o configurei para que os comandos sejam inseridos após uma linha que contém as informações do usuário @ host / Diretório. última parte do diretório e host que descrevi acima.Desculpe, sou péssimo em explicar isso, o vídeo fará um trabalho melhor.

Aqui está o conteúdo do meu .bash_profile:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "
Blair Beckwith
fonte

Respostas:

12

Você deve colocar seus caracteres não imprimíveis (nesse caso, suas seqüências de escape ANSI) com sequências de escape bash: \[e \]. Dessa forma, o bash saberá que os caracteres incluídos não são visíveis, ou seja. eles não ocupam espaço, ie. eles não devem ser incluídos no cálculo do comprimento da palavra usado pelo wrapper de linha.

em outras palavras, mude sua PS1definição:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… para:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

E aqui está o mesmo PS1valor, somente para leitura humana, com talvez uma legibilidade melhorada (ANSI escapa na linha inferior, bash escapa no meio e caracteres de impressão na linha superior).

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Leitura adicional:

Jari Keinänen
fonte
Isso é perfeito, resolveu o meu problema. Muito obrigado pela ajuda!
Blair Beckwith
Blair, seja bem-vindo ao Ask Different! Se você gosta de uma resposta para sua pergunta, faça um voto positivo e aceite-a.
nohillside
0

Eu todo mundo

Eu tive problemas semelhantes e encontrei uma solução alterando minha variável PS1 da original para uma muito simples, apenas meu nome: export PS1 = Alex

Agora meu terminal não tem mais nenhum comportamento estranho.

Espero que ajude.

Alex (no Mac Lion 10.8)

user43414
fonte