Команда forward-search-history
будет делать то, что вы хотите - она будет выполнять инкрементальный поиск в прямом направлении, а если вы уже находитесь в режиме инкрементального поиска, она просто переключит направление поиска, сохраняя текущую строку поиска.
Проблема в достижении этой команды. Привязки Readline по умолчанию содержат:
"\C-r": reverse-search-history
"\C-s": forward-search-history
Но C-s
- это символ управления потоком терминала, который не достигает bash
(хотя он будет работать в таких программах, как Emacs, которые изменяют настройки терминала, чтобы отключить обработку управления потоком). Поэтому привязка по умолчанию бесполезна, и вам нужно связать какой-то другой ключ с командой forward-search-history
.
Другая проблема состоит в том, что привязки клавиш с модификатором Meta не работают для инкрементального поиска - модификатор Meta фактически добавляет префикс ESC, и ESC завершает инкрементный поиск, даже если он удален из значения переменной isearch-terminators
. Комбинации с префиксом C-x
также не работают - нажатие C-x
немедленно прекращает добавочный поиск. Поэтому вам нужно привязать простой C-<key>
к команде forward-search-history
; однако все такие управляющие символы уже заняты командами readline, поэтому вам придется пожертвовать другой командой, чтобы освободить ключ для forward-search-history
.
Пример ~/.inputrc
для использования C-t
для прямого поиска (замена команды transpose-chars
):
"\C-t": forward-search-history