Comment rendre sensible au préfixe de l'historique bash?

8

Comment puis-je faire en appuyant sur haut / bas sur bash afficher la dernière commande qui a commencé avec le préfixe que j'ai déjà entré?

Par exemple

$ ls foo
$ echo hello
$ ls <UP_ARROW>

Cliquer sur UP après avoir entré ls devrait faire apparaître "ls foo" et non "echo hello"

ripper234
la source

Réponses:

11

Quelques possibilités:

  1. Liez les history-search-backward/forwardcommandes. Je crois que c'est le plus proche de ce que vous voulez:

    bind '"\e[A":history-search-backward'
    bind '"\e[B":history-search-forward'
  2. Utilisez l'historique de recherche. C'est probablement lié à ^R. Sur une ligne vide, ^Rls<space>vous ramènera à ls foo, puis vous ramènera à ^Rla dernière lscommande (ou à une autre commande avec lsquelque part dans la ligne) avant ls foo, etc ...

  3. Lier la magic-spacecommande: bind SPACE:magic-space. Tapez ensuite (sur une ligne vide) !ls<space>, et readline effectuera automatiquement la substitution d'historique, vous laissant avec ls foo.

Andy
la source
1
Merci. J'ai pris l'option 1, et avec l'aide de cette ancienne réponse, j'ai réalisé que \ e [B lierait la flèche vers le bas.
ripper234
J'ai modifié votre question pour inclure l'historique de recherche (bien, j'ai soumis une modification à la file d'attente de modification)
ripper234