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.