Чи існує спосіб використання 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

але це працює лише в тому випадку, якщо початок рядка однаковий.

Відповіді:


12

Ви можете шукати історію баша, використовуючи те, що ви вже легко набрали.

Припустимо, ви щойно набрали текст curl -I http://superuser.comі ви забули набрати Ctrl+ rспочатку:

$ curl -I http://superuser.com

Якщо ви хочете зробити I-пошук по історії, перейдіть на початок рядка першого ( Ctrl+ a), введіть я-пошук ( 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"

Зауважте, що тут ми опускаємо єдині цитати.

Ця відповідь може бути корисною.


1
Я не впевнений, чи це проблема з моєю конфігурацією, але після введення c-rтексту c-yнічого не вставити туди. Якщо я c-y
набираю

Ви спочатку переходите до початку рядка? (Ca)
hso

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 : Запускає зворотний пошук із символами

Мені досі не зрозуміло, чому Cy вставляє команду в поле пошуку (Ca не повинен бути командою "copy", чи не так?) І чому Cw вставляє лише перше слово.
Маркус

так, C-aне тільки рухається, але запам'ятовується (копіюється) вміст, який перемістився.
Доктор Беко

Я не можу підтвердити цю поведінку (просто спробуйте Ca Cy), я вважаю, що більш ймовірно, що Cr має вбудовані якісь особливі випадки, але я не знаю, де вони зафіксовані.
Маркус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.