Редактирование .bashrc портит терминальную печать истории стрелки команды

Я хотел дать свою терминальную подсказку в Ubuntu более персональный взгляд и хотел изменить текст до '$' при записи команды.

Из того, что я нашел, что это сделано путем редактирования .bashrc файла в корневом каталоге, таким образом, я пошел туда и изменился

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

кому:

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

Это работает, и терминал выглядит способ, к которому я хочу его.

Но через какое-то время при вводе нескольких команд, когда я использую ключ стрелки для получения до истории команд, вещи становятся странными.

От чистой строки и нажатия клавиши стрелки работы. При нажатии ее снова текст, который был на строке, ограничивается приблизительно в ~15 символах и новой команде в истории (который, как предполагается, отображен), ограничивается несколькими символами в начале, и они - вид объединенных вместе на командной строке.

Например, мои две новых команды

Java Test4 words-250.txt words-250-in.txt
Javac Test4.java

При нажатии клавиши стрелки однажды, отображена первая строка, как она должна. При нажатии его во второй раз, это отображено:

Java Test4 worc Test4.java

Несмотря на этот странный вывод, терминал хорошо работает. Если, например, я нажму Enter после выполнения вышеупомянутого, то Javac Test4.java будет работать. Если я вместо этого пытаюсь удалить всю строку с помощью клавиши Backspace, я только могу удалить вплоть до строки, говорит

Java Test4

и при нажатии Enter после этого я получаю новую пустую строку, так же, как если бы строка была пуста при нажатии Enter.

Все это уходит, если я сбросил .bashrc файл.

Почему это происходит и как я могу зафиксировать его?

5
задан 19 April 2015 в 22:43

1 ответ

Я понятия не имею, почему (никогда действительно понял управляющие коды), но адаптация другой подсказки, кажется, работает:

PS1='\[\033[1;32m\][\W]\$ \[\033[00m\]'

По-видимому, необходимо включить escape-последовательности в \[...\], сказать удару не считать их при определении быстрой ширины. Поэтому и вышеупомянутое PS1 и следующее работали бы одинаково хорошо:

PS1='\[\e[1;32m\][\W]\$ \[\e[m\]'
7
ответ дан 20 April 2015 в 08:43

Другие вопросы по тегам:

Похожие вопросы: