!:0
devrait faire l'affaire. À partir de la documentation zsh :
Word Designators A word designator indicates which word or words of a given command line are to be included in a history reference. A `:' usually separates the event specification from the word designator. It may be omitted only if the word designator begins with a `^', `$', `*', `-' or `%'. Word designators include: 0 The first input word (command). n The nth argument. ^ The first argument. That is, 1. $ The last argument. % The word matched by (the most recent) ?str search. x-y A range of words; x defaults to 0. * All the arguments, or a null value if there are none. x* Abbreviates `x-$'. x- Like `x*' but omitting word $.
(Cela fonctionne aussi avec bash.) Il y a aussi !-1
si vous trouvez cela plus pratique à taper.
#TL;DRAlt +0 +. :insère la dernière commande sans les arguments
Testé sur Ubuntu 18.04 avec les paramètres de raccourci clavier par défaut (c'est-à-dire les raccourcis clavier Emacs)
Vous pouvez combiner des raccourcis clavier
Considérons que la dernière commande est :
mv foo bar
haut , Ctrl +w :dernière commande sans le dernier mot =mv foo
Alt +0 +. :premier argument de la dernière commande =mv
Quelques raccourcis utiles :
-
Alt +. :insère le dernier argument de la dernière commande (répéter pour remonter dans l'historique)
-
Alt +numéro +. :insère le nième dernier argument de la dernière commande (répéter pour remonter dans l'historique)
-
Alt +- , nombre , Alt +. , zsh : Alt +- +# +. :insère le nième premier argument de la dernière commande (répéter pour remonter dans l'historique)
-
Commandes Couper (par rapport à la position du curseur)
-
Ctrl +w :coupe le dernier mot
-
Alt +d :coupe le mot suivant
-
Ctrl +k :coupe tout après
-
Ctrl +u , zsh : Alt +w :coupe tout avant
-
zsh : Ctrl +u :coupe toute la commande (Dans bash vous pouvez combiner Ctrl +u , Ctrl +k )
-
Ctrl +y :coller les caractères précédemment coupés avec n'importe quelle commande Couper . En bash, vous pouvez enchaîner les commandes de coupe , et Ctrl +y les collera tous.
-
Ctrl +_ :annuler la dernière édition (très utile en cas de dépassement de Ctrl +w )
-
Ctrl +gauche :passer au dernier mot
-
Ctrl +droit :passer au mot suivant
-
accueil ou Ctrl +un :aller au début de la commande
-
fin ou Ctrl +e :aller à la fin de la commande
Pour voir tous les raccourcis disponibles
- bash :
bind -lp
- zsh :
bindkey -L
Malheureusement, il existe certaines limitations
"words" inclut uniquement a-zA-Z
caractères, de sorte que tout caractère de symbole arrêtera les raccourcis vers les mots.
Donc, si le dernier argument était une URL et que vous voulez l'effacer avec Ctrl +w ce sera pénible.
Ex :curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questions/38176514/re-run-previous-command-with-different-arguments
Pour effacer cette url en utilisant Ctrl +w , vous devrez le répéter 12 fois.
Ce serait formidable d'avoir des raccourcis similaires qui ne s'arrêtent qu'au caractère espace
Je garde cela à jour ici :https://github.com/madacol/docs/blob/master/bash-zsh_TerminalShorcuts.md