!:0
debería hacer el truco. De la documentación de 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 $.
(También funciona con bash). También hay !-1
si lo encuentra más conveniente para escribir.
#TL;DRAlt +0 +. :inserta el último comando sin los argumentos
Probado en Ubuntu 18.04 con la configuración predeterminada de combinación de teclas (es decir, combinaciones de teclas de Emacs)
Puedes combinar atajos de teclado
Consideremos que el último comando es:
mv foo bar
arriba , Ctrl +w :último comando sin la última palabra =mv foo
Alt +0 +. :primer argumento del último comando =mv
Algunos atajos útiles:
-
Alt +. :inserte el último argumento del último comando (repita para retroceder en el historial)
-
Alt +número +. :inserte #n-ésimo último argumento del último comando (repita para retroceder en el historial)
-
Alt +- , número , Alt +. , zsh: Alt +- +# +. :inserte #nth primer argumento del último comando (repita para retroceder en el historial)
-
Comandos de corte (relativo a la posición del cursor)
-
Ctrl +w :corta la última palabra
-
Alt +d :corta la siguiente palabra
-
Ctrl +k :corta todo después
-
Ctrl +u , zsh: Alt +w :corta todo lo anterior
-
zsh: Ctrl +u :corta todo el comando (En bash puede combinar Ctrl +u , Ctrl +k )
-
Ctrl +y :pega caracteres previamente cortados con cualquier comando Cortar . En bash puedes encadenar comandos de corte y Ctrl +y los pegará todos.
-
Ctrl +_ :deshacer la última edición (muy útil cuando se excede Ctrl +w )
-
Ctrl +izquierda :ir a la última palabra
-
Ctrl +derecha :pasar a la siguiente palabra
-
casa o Ctrl +a :mover al inicio del comando
-
fin o Ctrl +e :mover al final del comando
Para ver todos los atajos disponibles
- golpe:
bind -lp
- zsh:
bindkey -L
Desafortunadamente hay algunas limitaciones
"palabras" solo incluye a-zA-Z
caracteres, por lo que cualquier carácter de símbolo detendrá los atajos de palabras.
Entonces, si el último argumento fue una URL y desea borrarlo con Ctrl +w será un dolor.
Por ejemplo:curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questions/38176514/re-run-previous-command-with-different-arguments
Para borrar esa url usando Ctrl +w , tendrías que repetirlo 12 veces.
Sería genial tener accesos directos similares que solo se detengan en el carácter de espacio
Mantengo esto actualizado aquí:https://github.com/madacol/docs/blob/master/bash-zsh_TerminalShorcuts.md