Альтернатива обратному поиску Ctrl-R в bash

Я счастлив и мне очень нравится функция обратного поиска Ctrl-R оболочки bash. Некоторым из моих коллег это не нравится, так как иногда это сбивает с толку. Я понимаю их. Если вы введете неправильные символы, текущая позиция в истории окажется где-то в прошлом, и вы не найдете последних совпадений.

Есть ли более удобная альтернатива для поиска назад в истории оболочки?

Я хочу придерживаться Баша. Предложение альтернативной оболочки не является ответом на этот вопрос.

Проблема с «потерянной позицией» объясняется здесь: Сбросить позицию поиска истории bash Эти решения работают. Вот так. Но решение, на мой взгляд, не простое и удобное для пользователя. Эти решения не являются простыми и прямыми. Это решения прошлого. В прошлом человеку нужно было учиться так, как компьютер хотел ввода. Но сегодня инструменты должны принимать ввод удобным для пользователя способом.


person guettli    schedule 07.06.2019    source источник
comment
Настройка и использование интерактивной оболочки — это тема для Unix и Linux, а не Stack Overflow; наша сфера деятельности здесь ограничена вопросами, уникальными для разработки программного обеспечения.   -  person Charles Duffy    schedule 07.06.2019
comment
@CharlesDuffy, ты прав. Я открыл там новый вопрос: unix.stackexchange.com/questions/523543/   -  person guettli    schedule 07.06.2019


Ответы (3)


Если вы ввели неправильные символы для поиска, нажмите Ctrl-G, чтобы остановить поиск, а затем Ctrl-R и правильные символы, чтобы перезапустить поиск.

Вы также можете настроить Ctrl-S, чтобы изменить направление поиска, если вы ввели правильные символы поиска, но перешли на много шагов назад. Ctrl-S позволяет вам двигаться вперед. Чтобы включить это, вам нужно будет добавить:

stty -ixon

в ваш файл запуска Bash. И вам может понадобиться добавить:

"\C-s": forward-search-history

к вашему ~/.inputrc.

person Dennis Williamson    schedule 07.06.2019
comment
Обратите внимание, что ctrl-S и ctrl-Q также используются большинством терминалов для управления потоком (ctrl-S — пауза), поэтому вы можете использовать другую клавишу. - person Gem Taylor; 08.02.2021

Вы также можете использовать history-search-backward. По умолчанию он не привязан к какой-либо клавише, поэтому вам нужно добавить

"\eq": history-search-backward

к вашему ~/.inputrc. Затем вы можете ввести префикс команды, которую вы хотите найти в истории, например.

cd /l

затем нажмите Alt+q, и оболочка расширит его до

cd /last-visited-dir

Повторное нажатие комбинации клавиш приведет к поиску предыдущего упоминания и т. д.

person choroba    schedule 07.06.2019

Конвейерная передача history через grep дает вам "менее интерактивный" способ взаимодействия с буфером истории, но иногда вам нужен менее интерактивный способ.

Вы можете повторно выполнить определенную пронумерованную команду из вывода grep с помощью !number

person Gem Taylor    schedule 07.06.2019