Я лихорадочно нажимаю CTRL+R, чтобы найти какую-то команду, которую я использовал некоторое время назад, когда внезапно до нее дохожу. По рефлексу я продолжаю нажимать CTRL+R, передавая его для чего-то еще назад в истории оболочки. Как мне вернуться к команде, которую я только что передал, без необходимости начинать весь поиск заново?
1 ответ
Функциональность 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