2

Вероятно, это очень простой вопрос, но мне бы очень хотелось выяснить, возможно ли это.

Если я начну обратный поиск в истории с помощью Cr, а затем снова нажму Cr несколько раз, я смогу искать другие cmds в истории.

При быстром нажатии Cr часто случается, что я пропускаю cmd, который хочу использовать, поэтому я хотел бы найти способ вернуться к предыдущему cmd.

Возможно ли это с текущей версией readline?

2 ответа2

2

Команда 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
1

Вы можете отключить управление потоком XON/XOFF:

stty -ixon

в вашем ~/.profile или аналогичном, тогда Ctrl+S будет распознан.

пример

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .