¿Hay alguna manera de usar ctrl-r después de escribir parte del comando en bash?


13

En bash, el comando Ctrl+ res muy útil, escribo Ctrl+ r whatevery busca en mi historial comandos que contengan la palabra whatever. Pero si escribo whatevery me doy cuenta de que me gustaría buscar esa palabra y presionar Ctrl+ rno pasa nada.

¿Hay alguna manera de presionar una tecla y hacer que se comporte como si hubiera escrito Ctrl+ en r whateverlugar de whatever Ctrl+ r?

Tengo lo siguiente en mi .inputrc:

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

pero esto solo funciona si el comienzo de la línea es el mismo.

Respuestas:


12

Puede buscar el historial de bash usando lo que ya ha escrito fácilmente.

Supongamos que acaba de escribir curl -I http://superuser.comy olvidó escribir Ctrl+ rprimero:

$ curl -I http://superuser.com

Si desea hacer una búsqueda i en su historial, primero vaya al principio de la línea ( Ctrl+ a), ingrese i-search ( Ctrl+ r) y escriba Ctrl+ y. Esto debería buscar utilizando el contenido de todo el texto que ya escribió:

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

Alternativamente, puede usar Ctrl+ en wlugar de Ctrl+ ypara buscar usando solo la primera palabra del texto que acaba de escribir:

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

Vinculando todo a una sola tecla

Si desea hacer todo esto con solo presionar una tecla, puede vincular una sola tecla a una macro de teclado. Si quieres usar, por ejemplo, F12ejecuta:

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

Eso durará para la sesión.

Haciéndolo permanente

Simplemente defina la macro en su ~/.inputrc:

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

Tenga en cuenta que aquí omitimos las comillas simples.

Puede encontrar esta respuesta útil.


1
No estoy seguro de si es un problema con mi configuración, pero después de c-rescribir c-y, no pego nada allí. Si escribo c-ypor sí solo Pega el texto, por lo que no es posible combinar los dos comandos ...
skeept

¿Vas al principio de la línea primero? (Ca)
hso

1
Tienes razón, no iba a principio de línea. ¡Ahora tengo en mi .inputrc "\C-xr": "\C-a\C-r\C-y"y funciona muy bien! Gracias por esta respuesta
guardado el

¡Creo que es la tercera vez que busco en Google esto control+a control+r control+y! Gracias esta respuesta siempre está aquí! :)
Dr Beco

2

Ahorre cuatro golpes:

Evite un segundo Ctrl-Ragregando a su .bashrc(o a su .inputrcsi lo prefiere):

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

Esto asignará ALT-R a CTR-A CTR-R CTR-Y CTR-R

Descripción:

  • ALT-R : la clave de enlace. Otra buena opción es \C-xr( CTR-X CTR-R )
  • CTR-A : Ir al comienzo de la línea (memorizar lo que está escrito)
  • CTR-R : iniciar la búsqueda inversa
  • CTR-Y : pegue lo que CTR-A memorizó como parte de la búsqueda
  • CTR-R : activa la búsqueda inversa con los personajes hasta ahora

Todavía no me queda claro por qué Cy pega el comando en el campo de búsqueda (se supone que Ca no es un comando de "copia", ¿verdad?) Y por qué Cw pega solo la primera palabra.
marcus

sí, C-ano solo se mueve, sino que memoriza (copia) el contenido movido.
Dr Beco

No puedo confirmar ese comportamiento (solo prueba Ca Cy), creo que es más probable que Cr tenga algunos casos especiales incorporados, pero no sé dónde están documentados.
marcus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.