Control-r reverse-i-search в bash: как вы "reset" выполняете поиск в Cygwin?
Вопрос: Как вы скажите Ctrl + r reverse-i-search на "reset сам" и каждый раз начинаете поиск со своей истории?
Фон: При использовании обратного i-поиска в Bash я всегда застреваю после того, как он закончит поиск по истории и больше не найдет совпадений. Иногда я нажимал Esc и повторно вызывал Ctrl + r второй раз, ожидая, что он начнет новый новый поиск со дна моей истории. Однако "указатель" по-прежнему кажется на прежнем месте, который он оставил в моей истории.
Проблема в том, что я обычно не хочу этого поведения. Если я нажму Esc, а затем повторно вызову Ctrl + r, я бы хотел, чтобы это означало, что он должен снова начинать снизу и работать обратно.
Обновление: Думаю, я должен был упомянуть, что я использую Cygwin для Windows, поскольку ни одно из упомянутых выше решений не работает.
Обновление: Этот вопрос был отмечен как потенциальный дублирующий вопрос. Этот вопрос не дублируется по следующим причинам:
- Альтернативный вопрос не касается Cygwin.
- В альтернативном вопросе не рассматривается, как reset поиск в его исходное состояние (вместо этого он имеет дело просто с обратным шагом в поиске, а также в режиме переадресации).
Ответы
Ответ 1
Я никогда не пробовал делать это по умолчанию при нажатии Escape, но bash использует readline
для ввода, который по умолчанию использует привязки в стиле Emacs, поэтому вы можете перейти к нижней части с помощью M->
(обычно либо путем объединения Meta/Alt и >
или, следуя клавише Escape с >
).
Если M->
не работает, потому что ваш терминал не позволяет вам ввести его, попробуйте ^G
(Control и G
одновременно). Это "отменить" ход в Emacs и обычно работает с readline
тоже.
Ответ 2
Мой bash работает так, как вы ожидаете. Может быть, нажатие "ctrl + C" вместо "esc" может помочь.
Кроме того, вы можете искать вперед, используя "ctrl + s"
edit: ctrl + s работает, если он не отправляет "остановку" на ваш терминал, то есть если "stty -a" дает вам "-ixon". Вы можете изменить его на "stty -ixon". Спасибо @Phil за напоминание.
Ответ 3
Получил подтвержденный ответ на этот вопрос.
В reset ctrl-r может использоваться обычный ключ ctrl-g emacs. Если вы хотите отменить ctrl-r на один шаг, вместо того, чтобы снова работать с нуля, вы можете использовать ctrl-s. Фокус в том, что ctrl-s также используется для приостановки терминала. Поэтому вам нужно назначить это другому ключу. Например, следующее устанавливает паузу в ctrl-w (и сохраняет "возобновление" с помощью ctrl-q).
$ stty STOP ^w
В качестве альтернативы вы также можете полностью отключить символы управления потоком XON/XOFF (возобновить/приостановить) с помощью
$ stty -ixon -ixoff
Это также освободит ctrl-s. Чтобы снова включить паузу/возобновление, вы можете сделать
$ stty ixon ixoff
Ответ 4
M-> ... moves to end of history
M-< ... moves to start of history
Ваш левый Alt-ключ скорее всего будет вашим мета-ключом.
Man readline для других директив readline.