Existe-t-il un moyen d'utiliser ctrl-r après avoir tapé une partie de la commande dans bash?


13

En bash, la commande Ctrl+ rest très utile, je tape Ctrl+ r whateveret elle recherche dans mon historique les commandes contenant le mot whatever. Mais si je tape whateveret réalise que je voudrais rechercher ce mot et appuyer sur Ctrl+ rrien ne se passe.

Existe-t-il un moyen d'appuyer sur une touche et de la faire se comporter comme si j'avais tapé Ctrl+ r whateverau lieu de whatever Ctrl+ r?

J'ai les éléments suivants dans mon .inputrc:

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

mais cela ne fonctionne que si le début de la ligne est le même.

Réponses:


12

Vous pouvez rechercher facilement l'historique de bash en utilisant ce que vous avez déjà tapé.

Supposons que vous venez de taper curl -I http://superuser.comet que vous avez oublié de taper Ctrl+ d' rabord:

$ curl -I http://superuser.com

Si vous voulez faire un i-recherche sur votre histoire, allez au début de la ligne d' abord ( Ctrl+ a), entrez i-recherche ( Ctrl+ r) et le type Ctrl+ y. Cela devrait rechercher en utilisant le contenu de tout le texte que vous avez déjà tapé:

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

Alternativement, vous pouvez utiliser Ctrl+ wau lieu de Ctrl+ ypour rechercher en utilisant uniquement le premier mot du texte que vous venez de taper:

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

Relier le tout à une seule clé

Si vous voulez faire tout cela en une seule frappe, vous pouvez lier une seule touche à une macro de clavier. Si vous voulez utiliser, par exemple, F12exécutez:

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

Cela durera pendant la session.

Rendre permanent

Définissez simplement la macro dans votre ~/.inputrc:

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

Notez qu'ici nous omettons les guillemets simples.

Vous pourriez trouver cette réponse utile.


1
Je ne sais pas si c'est un problème avec ma configuration, mais après avoir c-rtapé, je c-yn'y colle rien. Si je tape c-yseul, le texte est
collé

Allez-vous d'abord au début de la ligne? (Ca)
hso

1
Vous avez raison, je n'allais pas au début de la ligne. Maintenant, je l'ai dans mon .inputrc "\C-xr": "\C-a\C-r\C-y"et cela fonctionne très bien! Merci pour cette réponse.
skeept

Je pense que c'est la troisième fois que je google cette control+a control+r control+ychose! Merci cette réponse est toujours là! :)
Dr Beco

2

Enregistrez quatre frappes:

Évitez une seconde Ctrl-Ren ajoutant à votre .bashrc(ou à votre .inputrcsi vous préférez):

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

Cela mappera ALT-R à CTR-A CTR-R CTR-Y CTR-R

La description:

  • ALT-R : la clé de reliure. Une autre bonne option est \C-xr( CTR-X CTR-R )
  • CTR-A : Aller au début de la ligne (mémoriser ce qui est écrit)
  • CTR-R : Lancer la recherche inversée
  • CTR-Y : collez ce que CTR-A a mémorisé dans le cadre de la recherche
  • CTR-R : déclenche la recherche inversée avec les caractères jusqu'à présent

Je ne comprends toujours pas pourquoi Cy colle la commande dans le champ de recherche (Ca n'est pas censé être une commande "copier", n'est-ce pas?) Et pourquoi Cw ne colle que le premier mot.
marcus

oui, C-anon seulement se déplace, mais mémorise (copie) le contenu déplacé.
Dr Beco

Je ne peux pas confirmer ce comportement (essayez simplement Ca Cy), je pense qu'il est plus probable que Cr comporte des cas spéciaux, mais je ne sais pas où ils sont documentés.
marcus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.