Control-r reverse-i-search в bash: как «сбросить» поиск в Cygwin? - PullRequest
48 голосов
/ 15 февраля 2009

Вопрос: Как вы говорите Ctrl + r reverse-i-search, чтобы "сбросить себя" и начинать поиск с нижней части вашей истории каждый время

Справочная информация: При использовании обратного поиска в Bash я всегда застреваю, когда он завершает поиск по истории и не может найти больше совпадений. Иногда я нажимаю Esc и повторно вызываю Ctrl + r второй раз, ожидая, что он начнет новый новый поиск из глубины моей истории. Тем не менее, «указатель» все еще, кажется, находится на прежнем месте, где он остановился в моей истории.

Проблема в том, что я обычно не хочу такого поведения. Если я нажму Esc , а затем повторно вызову Ctrl + r , я хотел бы указать, что он должен перезапустить снизу снова и работать его путь назад.

Обновление: Полагаю, мне следовало упомянуть, что я использую Cygwin в Windows, поскольку ни одно из упомянутых выше решений не работает.

Обновление: Этот вопрос был помечен как потенциальный дубликат вопроса . Этот вопрос не является дубликатом по следующим причинам:

  • Альтернативный вопрос не касается Cygwin.
  • Альтернативный вопрос не касается того, как сбросить поиск в его первоначальное состояние (вместо этого он имеет дело просто с движением назад при поиске, а также вперед).

Ответы [ 4 ]

32 голосов
/ 15 февраля 2009

Мой bash работает так, как вы ожидаете. Может быть, ударить «Ctrl + C» вместо «Esc» может помочь.

Кроме того, вы можете искать вперед, используя "Ctrl + S"

edit : ctrl + s работает, если он не отправляет "stop" на ваш терминал, т.е. если "stty -a" дает вам "-ixon" Вы можете изменить это с помощью "stty -ixon". Спасибо @Phil за напоминание.

22 голосов
/ 15 февраля 2009

Я никогда не пытался установить это значение по умолчанию при нажатии клавиши Escape, но bash использует readline для ввода, который принимает комбинации клавиш в стиле Emacs по умолчанию, поэтому вы можете перейти к нижней части, используя M-> (обычно либо комбинируя мета Alt и > или после клавиши Escape с >).

Если M-> не работает, потому что ваш терминал не позволяет вам ввести это, попробуйте ^G (Control и G одновременно). Это удар "отмена" в Emacs, который обычно работает и с readline.

14 голосов
/ 15 июля 2010

Получил подтвержденный ответ на этот вопрос.

Чтобы сбросить ctrl-r, обычный emacs-ключ ctrl-g может это сделать. Если вы хотите изменить ctrl-r на один шаг, вместо того, чтобы снова подниматься снизу вверх, вы можете использовать ctrl-s . Хитрость ctrl-s также используется для приостановки терминала. Так что вам нужно будет присвоить это другому ключу. Например, следующее установит pause на ctrl-w (и сохранит «resume» с помощью ctrl-q).

$ stty STOP ^w

В качестве альтернативы, вы также можете полностью отключить символы управления потоком XON / XOFF (возобновление / пауза) с помощью

$ stty -ixon -ixoff

Это также освободит Ctrl-s. Чтобы снова включить паузу / возобновление, вы можете сделать

$ stty ixon ixoff
2 голосов
/ 15 февраля 2009
M-> ... moves to end of history
M-< ... moves to start of history

Ваша левая клавиша Alt, скорее всего, является вашей мета-клавишей.

Man readline для дополнительных директив readline.

...