Un shell peut-il effectuer une search interactive au niveau des arguments?

Parfois, j'ai besoin de réutiliser certains longs arguments comme des paths.

Si j'utilise la search d'historique ( CTRL + R ), je peux find une command qui contient le path, mais j'ai encore besoin de supprimer n'importe quoi d'autre dans l'ancienne command, puis déplacer le slider pour écrire la nouvelle command. Pire, c'est que je ne peux pas faire ça plus d'une fois dans une même ligne.

Je me request si un shell fournit une search d'historique au niveau des arguments?

La complétion d'tabs qui parsing les commands d'historique (et les arguments) aide d'une manière ou d'une autre. Mais l'achèvement doit correspondre au préfixe que vous tapez, au lieu de toutes les sous-strings.

Si je comprends bien, vous êtes après dynamic-histoire complète (voir par exemple man bash ou http://www.cl.cam.ac.uk/local/sys/unix/applications/bash/ ), par défaut lié à M-Tab .

En zsh, avec l'achèvement du nouveau style actif (c'est-à-dire avec compinit dans votre .zshrc ), la fonction _history_complete_word fournit cette fonctionnalité. Il est accessible via deux widgets: _history-complete-older et _history-complete-newer , lié à ESC , et ESC / par défaut. Ces deux commands parcourent tous les mots de l'historique du shell qui ont le mot courant comme préfixe.

Dans bash(1) (cela provient à l'origine du shell C), vous pouvez répéter les commands précédentes en utilisant ! (aussi longtime qu'ils sont dans l'histoire). Donc, par exemple:

 enter code here frob --vigorous extremely/super/cali/fragi/listic/file/name ... ... xemacs !frob:$ # Edit last argument to last frob command !frob # Repeat last frobbing fiddle !frob:1-$ # Fiddle, use arguments 1 to last of !frob 

La syntaxe prend un certain time pour s'y habituer, et (en raison du luxe de readline) je l'utilise rarement, mais c'est très pratique. Il est (ou avait l'habitude d'être) fragile, car il fonctionnait par exemple de façon imprévisible dans les scripts (mais là, je ferais très certainement trois fois sûr d'exécuter la bonne command, donc …).

Jouez avec ALT-. , depuis la page de manuel de bash:

 - yank-last-arg (M-., M-_): Insert the last argument to the previous command (the last word of the previous history entry). With an argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last argument of each line in turn. The history expansion facilities are used to extract the last argument, as if the "!$" history expansion had been specified.