Есть ли способ использовать ctrl-r после ввода части команды в bash?

13

В bash команда Ctrl+ rочень полезна, я набираю Ctrl+, r whateverи она ищет в моей истории команды, содержащие слово whatever. Но если я наберу whateverи пойму, что хотел бы найти это слово и нажать Ctrl+, rничего не произойдет.

Есть ли способ нажать клавишу и заставить ее вести себя так, как будто я набрал Ctrl+ r whateverвместо whatever Ctrl+ r?

У меня есть следующее в моем .inputrc:

"\C-p": history-search-backward

но это работает, только если начало строки совпадает.

skeept
источник

Ответы:

12

Вы можете искать историю Bash, используя то, что вы уже набрали легко.

Предположим, вы только что набрали curl -I http://superuser.comи забыли сначала набрать Ctrl+ r:

$ curl -I http://superuser.com

Если вы хотите выполнить i-поиск по своей истории, сначала перейдите к началу строки ( Ctrl+ a), введите i-search ( Ctrl+ r) и введите Ctrl+ y. Это должно искать, используя содержимое всего текста, который вы уже набрали:

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq

Кроме того, вы можете использовать Ctrl+ wвместо Ctrl+ yдля поиска, используя только первое слово текста, который вы только что набрали:

(reverse-i-search)`curl': curl -I http://superuser.com/faq

Связать все это с одним ключом

Если вы хотите сделать все это одним нажатием клавиши, вы можете привязать одну клавишу к макросу клавиатуры. Если вы хотите использовать, скажем, F12запустить:

$ bind '"\e[24~":"\C-a\C-r\C-y"'

Это будет продолжаться на сессии.

Делая это постоянным

Просто определите макрос в вашем ~/.inputrc:

"\e[24~":"\C-a\C-r\C-y"

Обратите внимание, что здесь мы опускаем одинарные кавычки.

Вы можете найти этот ответ полезным.

HSO
источник
1
Я не уверен, что это проблема с моей конфигурацией, но после того, как я набрал c-rтекст, c-yничего не вставляется туда. Если я c-y
набираю
Вы идете в начале строки в первую очередь? (Ca)
2012 г.
1
Вы правы, я не собирался в начале строки. Теперь у меня есть .inputrc, "\C-xr": "\C-a\C-r\C-y"и он работает очень хорошо! Спасибо за этот ответ.
Скипет
Я думаю, что это третий раз, когда я погуглил эту control+a control+r control+yвещь! Спасибо, этот ответ всегда здесь! :)
Доктор Беко
2

Сохранить четыре удара:

Избегайте секунды Ctrl-R, добавив к вашему .bashrc(или к вашему, .inputrcесли вы предпочитаете):

bind '"\er":"\C-a\C-r\C-y\C-r"' # alt-r = ctr-a ctr-r ctr-y ctr-r

Это отобразит ALT-R в CTR-A CTR-R CTR-Y CTR-R

Описание:

  • ALT-R : обязательный ключ. Еще один хороший вариант \C-xr( CTR-X CTR-R )
  • CTR-A : перейти к началу строки (запоминание написанного)
  • CTR-R : начать обратный поиск
  • CTR-Y : вставить то, что CTR-A запомнил как часть поиска
  • CTR-R : покажет обратный поиск с символами до сих пор
Доктор Беко
источник
Мне все еще не ясно, почему Сай вставляет команду в поле поиска (Ca не должен быть командой «копирования», не так ли?) И почему Cw вставляет только первое слово.
Marcus
да, C-aне только перемещает, но и запоминает (копирует) перемещенный контент.
Доктор Беко
Я не могу подтвердить это поведение (просто попробуйте Ca Cy), я думаю, что более вероятно, что в Cr встроены некоторые особые случаи, но я не знаю, где они документированы.
Marcus