правильное использование клавиш вверх и вниз для проверки стрелок вверх и вниз

Я столкнулся с проблемой при использовании вверх и вниз на gnome-терминале. Допустим, мои предыдущие команды

vi pos_of_rightmost_setbit.cpp 
gcc -o harsha pos_of_rightmost_setbit.cpp

В этот момент, когда я нажимаю стрелку вверх, я вижу последнюю предыдущую команду gcc -o harsha pos_of_rightmost_setbit.cpp, которая идеальна.

Но когда я снова нажимаю стрелку вверх, я должен увидеть предпоследнюю предыдущую команду, которая является vi pos_of_rightmost_setbit.cpp, вместо этого я вижу gcc -o harvightmost_setbit.cpp.

Когда я нажимаю Enter в этот момент времени, команда vi pos_of_rightmost_setbit.cpp работает нормально, поэтому я думаю, что есть некоторые проблемы с настройками bashrc.

Прилагаю скриншоты для лучшего понимания. Для предыдущей команды

Для предпоследней предыдущей команды


person starkk92    schedule 01.09.2014    source источник
comment
запустите history, чтобы увидеть список команд, которые вы выполнили.   -  person Kent    schedule 01.09.2014
comment
Это похоже на тип терминала или проблему с настройкой подсказки, вызывающую проблемы с перерисовкой. Приводит ли нажатие ctrl-l после нажатия up к правильному отображению правильной команды?   -  person Etan Reisner    schedule 01.09.2014
comment
@EtanReisner Да, ctrl-l после нажатия правильно отображает команду. В чем может быть проблема?   -  person starkk92    schedule 02.09.2014
comment
@Кент Да! история работает нормально. На самом деле команда, которая отображается неправильно, также работает. Единственная проблема, которую я вижу, это отображение.   -  person starkk92    schedule 02.09.2014
comment
Какова ваша подсказка ($PS1)? Что установлено $TERM?   -  person Etan Reisner    schedule 02.09.2014
comment
@EtanReisner PS1=\e[1;39m[\u@\h \W]\$ \e[m Я видел эту проблему после добавления этого. Я видел поведение после комментирования этого. Тогда это выглядит нормально. Что может быть проблемой? Спасибо.   -  person starkk92    schedule 02.09.2014


Ответы (1)


Именно эта строка приглашения и является проблемой.

Вам нужно окружить каждый непечатаемый бит этой строки подсказки \[ и \], чтобы сообщить readline не учитывать их в длине подсказки.

Итак, у вас должно получиться что-то вроде PS1="\[\e[1;39m\][\u@\h \W]\$ \[\e[m\]".

Ссылка: https://superuser.com/questions/301353/escape-non-printing-characters-in-a-function-for-a-bash-prompt/301355#301355

person Etan Reisner    schedule 02.09.2014