!:0
dovrebbe fare il trucco. Dalla documentazione 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 $.
(Funziona anche con bash.) C'è anche !-1
se lo trovi più comodo da digitare.
#TL;DRAlt +0 +. :inserisce l'ultimo comando senza gli argomenti
Testato su Ubuntu 18.04 con le impostazioni di associazione tasti predefinite (ovvero associazioni di tasti Emacs)
Puoi combinare scorciatoie da tastiera
Consideriamo l'ultimo comando come:
mv foo bar
su , Ctrl +w :ultimo comando senza l'ultima parola =mv foo
Alt +0 +. :primo argomento dell'ultimo comando =mv
Alcune scorciatoie utili:
-
Alt +. :inserisci l'ultimo argomento dall'ultimo comando (ripeti per tornare indietro nella cronologia)
-
Alt +numero +. :inserisci l'ennesimo argomento dall'ultimo comando (ripeti per tornare indietro nella cronologia)
-
Alt +- , numero , Alt +. , zsh: Alt +- +# +. :inserisci #n° primo argomento dall'ultimo comando (ripeti per tornare indietro nella cronologia)
-
Comandi taglia (rispetto alla posizione del cursore)
-
Ctrl +w :taglia l'ultima parola
-
Alt +d :taglia la parola successiva
-
Ctrl +k :taglia tutto dopo
-
Ctrl +u , zsh: Alt +w :taglia tutto prima
-
zsh: Ctrl +u :taglia l'intero comando (In bash puoi combinare Ctrl +u , Ctrl +k )
-
Ctrl +y :incolla i caratteri precedentemente tagliati con qualsiasi comando Taglia . In bash puoi concatenare i comandi cut e Ctrl +y li incollerà tutti.
-
Ctrl +_ :annulla l'ultima modifica (molto utile quando si supera Ctrl +w )
-
Ctrl +sinistra :passa all'ultima parola
-
Ctrl +destra :passa alla parola successiva
-
casa o Ctrl +a :sposta all'inizio del comando
-
fine o Ctrl +e :sposta alla fine del comando
Per vedere tutte le scorciatoie disponibili
- bash:
bind -lp
- zsh:
bindkey -L
Purtroppo ci sono alcune limitazioni
"parole" include solo a-zA-Z
caratteri, quindi qualsiasi carattere simbolo interromperà le scorciatoie di parole.
Quindi, se l'ultimo argomento era un URL e vuoi cancellarlo con Ctrl +w sarà un dolore.
Ad esempio:curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questions/38176514/re-run-previous-command-with-different-arguments
Per cancellare quell'url usando Ctrl +w , dovresti ripeterlo 12 volte.
Sarebbe bello avere scorciatoie simili che si fermano solo al carattere spazio
Lo tengo aggiornato qui:https://github.com/madacol/docs/blob/master/bash-zsh_TerminalShorcuts.md