У меня есть строка в моем .bashrc следующей строке:
bind '"\e[A": history-search-backward'
, которая приводит к тому, что когда я пишу «abc» в командную строку и нажимаю стрелку вверх, bash ищет в истории только те команды, которые запускаются с "abc". Все в порядке, пока я не запустил top (и, возможно, некоторые другие приложения, в которых я не уверен, с top, я уверен), когда это поведение переходит на обычный поиск. Однако, когда я запускаю bind '"\e[A": history-search-backward'
в терминале, ничего не меняется, и мне приходится убивать и перезапускать терминал, чтобы вернуть старое поведение. Есть ли способ отменить (или предотвратить это)? Это происходит в gnome-Terminal и Xterm в Unity и Gnome Shell. tty, кажется, не затронут.
Мой -bashrc поверх Stok Ubuntu .bashrc это:
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
# that behaviour is for pageup and pagedown
bind '"\e[5~": previous-history'
bind '"\e[6~": next-history'
# show possibilities if tab ambigious
set show-all-if-ambiguous on
# ignore case when completing, lets see how it works
set completion-ignore-case on
shopt -s cdspell
HISTSIZE=10000
HISTCONTROL=ignoredups
HISTFILESIZE=10001
HISTTIMEFORMAT="%h/%d - %H:%M:%S "
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Оказывается, некоторые некорректно работающие приложения нарушают режим курсора. Симптомы аналогичны ситуации, когда мы случайно cat
загружаем бинарный файл на терминал.
Исправление заключается в вызове сброса
. Если Enter
также не работает, то мы можем использовать Ctrl+J, как и здесь.
Что касается исходного вопроса о том, почему top
(или, в моем случае, какой-то случайный скрипт, использующий escape-символы для цветного вывода) ломает история поиска назад
. Когда он сломан, вы можете запустить read
, а затем нажать клавиши со стрелками. Обычно это \e[A
, но при нарушении может стать \eOA
. Таким образом, это можно также сопоставить с история-поиска-назад
, но обычно терминал находится в не очень удобном состоянии, и сброс
устраняет проблему.
Попробуйте отредактировать привязки в файле /etc/inputrc
.
Я использую «history-search-backward» во всех системах Linux, и у меня нет проблем с top.
Если у вас есть проблемы с редактированием файла, см. Мой ответ здесь .