3

Я лихорадочно нажимаю CTRL+R, чтобы найти какую-то команду, которую я использовал некоторое время назад, когда внезапно до нее дохожу. По рефлексу я продолжаю нажимать CTRL+R, передавая его для чего-то еще назад в истории оболочки. Как мне вернуться к команде, которую я только что передал, без необходимости начинать весь поиск заново?

1 ответ1

6

Функциональность Ctrl+R для поиска в обратном направлении по истории оболочки обеспечивается библиотекой Readline, используемой Bash. Соответствующая функция поиска вперед по истории, по умолчанию, связанный с Ctrl+S.

Однако проблема заключается в том, что драйвер терминала уже использует эту комбинацию клавиш для управления потоком: нажатие Ctrl+S останавливает или приостанавливает печать текста на терминал, а Ctrl+Q возобновляет поток символов, отправляемых на терминальное устройство.

Эти настройки по умолчанию включены для большинства терминальных устройств в системах GNU/Linux, в результате чего Bash/Readline никогда не видит последовательность клавиш Ctrl+S , так как она перехватывается драйвером терминала и никогда не передается в оболочку.

Это поведение (также называемое управлением потоком XON/XOFF) можно отключить, выполнив:

stty -ixon

Теперь комбинация клавиш Ctrl+S будет передана в Bash/Readline.

Альтернативная комбинация клавиш

Если вы предпочитаете, чтобы Readline использовал другую комбинацию клавиш для поиска вперед, используйте команду bind чтобы включить другую привязку клавиш, например, Ctrl+F (для пересылки). NB: все кавычки обязательны.

bind '"\C-f": forward-search-history'

Изменить конфигурацию, чтобы сохранить эти изменения

Управление потоком терминала не особенно полезно на современных устройствах, поэтому я бы рекомендовал запускать следующую команду всякий раз, когда запускается новый терминал или псевдотерминальное устройство:

stty -ixon

.bashrc , вероятно, будет хорошим начальным файлом для запуска этой команды, так как этот файл создан для интерактивных оболочек Bash. Если .bashrc не получен из .profile или .bash_profle , вышеупомянутая команда stty должна быть добавлена к любому файлу запуска, используемому для оболочек входа в систему.

Файл конфигурации Readline является .inputrc , если вы предпочитаете использовать другой ключ связывания , такие как Ctrl+F для поиска вперед по истории:

bind "\C-f": forward-search-history

Ссылки по теме

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