CTRL+R в оболочке - если я пройду мимо нужной мне команды, как мне вернуться к ней?
Я лихорадочно нажимаю 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