!$
se développe jusqu'au dernier mot de votre commande précédente.
Vous pourriez donc :
cat foo/is/a/very/long/path/to/bar.c
rm !$
ou :
git diff foo/bar.c
git checkout !$
Vos exemples ne répétaient que le dernier mot, donc !$
a bien fonctionné. Si vous vouliez répéter beaucoup d'arguments et que vous vouliez juste changer le premier mot, vous pourriez utiliser !*
, qui s'étend à tous les mots de la commande précédente à l'exception du zéro.
Voir la section "EXPANSION DE L'HISTOIRE" du bash
page de manuel. Il y a beaucoup de flexibilité là-bas.
Ctrl +un pour aller au début de la ligne, puis Alt +d pour supprimer le premier mot.
Je ne sais pas si ce serait réellement plus rapide ou non, mais consultez cet article, en particulier le point n° 3 :
- Remplacez une chaîne de la commande précédente en utilisant ^str1^str2^
Dans l'exemple suivant, nous avons d'abord exécuté la commande ls pour vérifier un fichier. Plus tard, nous avons réalisé que nous voulions afficher le contenu du fichier. Au lieu de retaper à nouveau le nom complet du fichier, nous pouvons simplement remplacer le "ls" dans la commande précédente par "cat", comme indiqué ci-dessous.
$ ls /etc/cron.daily/logrotate $ ^ls^cat^ cat /etc/cron.daily/logrotate