Как выполнить прямой поиск по истории с помощью команды обратного поиска (ctrl+r)?

Как выполнить прямой поиск по истории с помощью команды обратного поиска (ctrl+r)?

В руководстве Readline

# man readline

Ниже описывается, как выполнять поиск назад и вперед.

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

Когда я нажимаю ctrl+r и печатаю "apt-get", я могу сделать обратный поиск по истории, постоянно нажимая ctrl+r. Но затем я нажимаю ctrl+s, и терминал не переходит вперед. Я что-то делаю неправильно?

А какой ключ представляет собой мета-префикс «M-»?

решение1

Последовательность C-sвзята из драйвера терминала, как вы можете видеть из

stty -a | grep '\^S'

Чтобы освободить последовательность для использования readline, установите последовательность терминала остановки на какую-либо другую последовательность, например:

stty stop ^J

или удалить его полностью с

stty stop undef

После этого C-sбудет работать в данном терминале.

Установите его ~/.bashrc, чтобы он работал на каждом терминале.

Последовательность M-означает Altключ, как уже отмечалось.

решение2

Помимо назначения другого символа «стоп» TTY, как предлагалось выше, вы можете полностью удалить его, если не планируете его использовать (я стараюсь этого не делать), например так:

$ stty stop undef

Тогда readline сможет использовать control-s для прямого поиска, и вы не столкнетесь с каким-либо странным поведением из-за добавления нового стоп-символа.

решение3

История прямого поиска (Cs) не работает (хотя она есть на странице руководства).

«M-» представляет собой модификатор клавиши Alt.

решение4

Пожалуйста, не используйте:

stty stop ^J

но

stty stop ^P

или что-нибудь еще, что ^Jсоздает большие проблемы с ssh. (Я не знаю почему в любом случае.) После того, как я вошел в систему, Enterобратная косая черта не работала. или мне приходилось вводить:

stty sane 
export TERM=linux

прежде чем я хотел напечатать

ssh root@192...

так

stty stop ^P

решил обе проблемы одновременно.

Связанный контент