Почему топовая история поиска в bash?

У меня есть строка в моем .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"
1
задан 18 June 2013 в 03:39

2 ответа

Оказывается, некоторые некорректно работающие приложения нарушают режим курсора. Симптомы аналогичны ситуации, когда мы случайно cat загружаем бинарный файл на терминал.

Исправление заключается в вызове сброса. Если Enter также не работает, то мы можем использовать Ctrl+J, как и здесь.

Что касается исходного вопроса о том, почему top (или, в моем случае, какой-то случайный скрипт, использующий escape-символы для цветного вывода) ломает история поиска назад. Когда он сломан, вы можете запустить read, а затем нажать клавиши со стрелками. Обычно это \e[A, но при нарушении может стать \eOA. Таким образом, это можно также сопоставить с история-поиска-назад, но обычно терминал находится в не очень удобном состоянии, и сброс устраняет проблему.

1
ответ дан 16 May 2020 в 00:42

Попробуйте отредактировать привязки в файле /etc/inputrc.

Я использую «history-search-backward» во всех системах Linux, и у меня нет проблем с top.

Если у вас есть проблемы с редактированием файла, см. Мой ответ здесь .

0
ответ дан 18 June 2013 в 03:39

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

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