Tout comme M-.
(meta-dot ou esc-dot ou alt-dot) est la fonction readline yank-last-arg
, M-C-y
(meta-control-y ou esc-ctrl-y ou ctrl-alt-y) est la fonction readline yank-nth-arg
. Sans préciser n
, il tire le premier argument de la commande précédente.
Pour spécifier un argument, appuyez sur Échap et sur un nombre ou maintenez la touche Alt et appuyez sur un nombre. Vous pouvez faire Alt- -pour commencer à spécifier un nombre négatif, puis relâchez Alt et appuyez sur le chiffre (cela comptera à partir de la fin de la liste des arguments.
Exemple:
Entrez la commande suivante
$ echo a b c d e f g
a b c d e f g
Maintenant, à l'invite suivante, tapez echo
(avec un espace suivant), puis
Appuyez sur Alt- Ctrl- yet vous verrez maintenant:
$ echo a
sans appuyer Enterencore, procédez comme suit
Appuyez sur Alt- 3 Alt- Ctrl-y
Appuyez sur Alt- - 2 Alt- Ctrl-y
Vous allez maintenant voir:
$ echo ace
Au fait, vous auriez pu mettre le echo
sur la ligne en sélectionnant l'argument 0:
Appuyez sur Alt- 0 Alt- Ctrl-y
Éditer:
Pour répondre à la question que vous avez ajoutée à votre original:
Vous pouvez appuyer sur Alt- 0puis sur à plusieurs reprises Alt- .pour parcourir les commandes précédentes (arg 0). De même Alt- -puis répéter Alt- .vous permettrait de parcourir les précédents avant-derniers arguments.
S'il n'y a pas d'argument approprié sur une ligne particulière de l'histoire, la cloche sonnera.
S'il existe une combinaison particulière que vous utilisez fréquemment, vous pouvez définir une macro pour qu'une seule touche puisse l'exécuter. Cet exemple rappellera le deuxième argument des commandes précédentes en appuyant sur Alt- Shift- Y. Vous pouvez choisir n'importe quelle touche disponible que vous préférez au lieu de celle-ci. Vous pouvez appuyer dessus à plusieurs reprises pour parcourir les précédents.
Pour l'essayer, entrez la macro à l'invite Bash:
bind '"\eY": "\e2\e."'
Pour le rendre persistant, ajoutez cette ligne à votre ~/.inputrc
fichier:
"\eY": "\e2\e."
Malheureusement, cela ne semble pas fonctionner pour l'arg 0 ou les nombres d'arguments négatifs.
bind -lp
et regarder les liaisons actuelles.-s
(nouveau dans Bash 4) répertorie les macros créées à l'aide-x
.M-.
:Alt-3
Alt-Ctrl-y
par exemple, égal à tenirAlt
et taper3.
. Si vous tapez3.
plusieurs fois sans le relâcher,Alt
vous passez par le troisième argument de vos lignes de commande précédentes.!$
obtient le dernier élément de l'argument de ligne de commande précédent.la source
!:3
vous obtient le troisième!!
vous obtient la dernière commande entière. Utile si vous avez oublié d'utilisersudo
.!:1-2
vous obtient tous sauf le dernier des 3 argumentsecho foo{,bar} baz
, la commande est enregistrée comme imprimée et se développe ensuite. Avec ce qui précède, l'utilisation deecho !:1
after se résout àecho foo{,bar}
puis se développe enecho foo foobar
Pour utiliser le premier argument, vous pouvez utiliser
!^
ou!:1
Exemple:
Puisque votre question concerne l'utilisation d'autres arguments, voici quelques arguments utiles:
Les quatre premiers formulaires sont plus souvent utilisés. Le formulaire
!:2-
est quelque peu contre-intuitif, car il n'inclut pas le dernier argument.la source
file3
demv file1 file2 file3 target/
?J'ai tellement aimé la réponse de @larsmans que j'ai dû en savoir plus. Ajouter cette réponse pour aider les autres à trouver la section de la page de manuel et à savoir sur quoi google:
la source
! ^ peut être la commande du premier argument. je ne sais pas s'il existe un moyen d'obtenir le nième.
la source
!:n
, mais en comptant à partir de la fin plutôt que du début?Vous pouvez également obtenir des arguments à partir de n'importe quelle commande de votre historique!
la source
Testé sur Ubuntu 18.04
Pour insérer des arguments précédents:
Sous Linux, vous pouvez répéter les commandes pour revenir dans l'histoire
Exemple:
La dernière commande est:
mv
foo
mv foo
Raccourcis généraux
Pour parcourir les arguments d'une commande précédente
ne fonctionne que dans zsh
exécuter ou ajouter ceci à votre
~/.zshrc
Utilisez maintenant Alt+ .pour revenir en arrière comme vous le souhaitez, puis utilisez Alt+ :pour parcourir les arguments
En supposant que la dernière commande est
5
4
3
2
1
echo
source: https://stackoverflow.com/a/34861762/3163120
Pour voir tous les raccourcis disponibles
bind -lp
bindkey -L
Je garde cela à jour dans cet essentiel https://gist.github.com/madacol/da38e42d7e45c2949a9f425cc20543e9
la source
Alt .
sur Zsh sur Mac tape≥
🤔bindkey -L
dans zsh pour voir tous les raccourcis liés, peut-être que cela aidera à identifier le problème ou même à trouver d'autres commandes utiles. Dans mon cas par exemple: la liaisonAlt .
est définie commebindkey "^[." insert-last-word
.Ctrl L
(pour effacer l'écran) ->bindkey "^L" clear-screen
.Alt+Ctrl h
->bindkey "^[^H" backward-kill-word
(commeCtrl w
pour supprimer le dernier mot)bindkey "^[^_" copy-prev-word
Fondamentalement, il a une utilité pour extraire les arguments précédents (de la commande) .
Par exemple, si la commande suivante est émise:
alors, ce
Hello,
sera le premier argument, ettoday?
le sixième , c'est le dernier; ce qui signifie qu'il peut être référencé en tapant:Alt+6 suivi par Ctrl-Alt-6
Ctrlest traditionnellement désigné comme un caractère de chapeau
^
ajouté aux noms des clés, et AltcommeM-
c'est le préfixe M eta .Ainsi, le raccourci ci-dessus peut être redéfini
^My
pour tirer.En outre, il existe un raccourci de substitution de chapeaux dans la ligne de commande:
pour remplacer la première chaîne correspondante de la commande précédente , ce qui signifie:
entraînerait:
laissant le deuxième match (
hello
) inchangé.Ce qui précède n'est qu'un raccourci pour:
la substitution au niveau de l'événement (*) de la première chaîne trouvée (appariée) dans la commande précédente, tandis que le préfixe de la première partie avec le
g
commutateur s'appliquera à l'ensemble de la ligne g lobalement :comme cela se fait habituellement dans d'autres commandes connexes telles que
sed
,vi
et dansregex
(expression régulière) - une méthode standard pour rechercher ( chaîne de correspondance ).C'est ce que j'ai compris en l'utilisant moi-même et en essayant moi-même des choses à partir de ce que j'ai lu à partir de diverses sources, y compris des pages de manuel, des blogs et des forums.
J'espère qu'il éclaircira de mystérieuses façons de faire
bash
, le shell Bourne-Again (un jeu sursh
shell, qui s'appelle lui-même Bourne shell d'après le nom de famille de son inventeur), ce qui est le shell par défaut dans de nombreuses distributions, y compris les serveurs ( OS de serveur ).la source
! ^ vous donnera le premier paramètre,! $ vous donnera le dernier paramètre,!: n vous obtiendrez le nième élément.
la source
La méthode décrite à la fin de la réponse acceptée fonctionne également avec l'argument zéro pour moi. J'ai ces lignes dans mon
~/.inputrc
:\e2\e.
présente l'avantage de\e2\e\C-y
faire défiler les commandes précédentes si elle est pressée à plusieurs reprises au lieu d'insérer plusieurs fois le deuxième argument de la commande précédente.Pour insérer toute la commande précédente, vous pouvez taper
!!\e^
.\e^
esthistory-expand-line
.la source
Si vous êtes sur un Mac, vous aurez tendance à obtenir des caractères étendus avec ctrl + lettre. J'ai ma clé d'option de barre d'espace droit définie comme méta dans mon terminal (iTerm2) configuré. Cela signifie que j'utilise la touche pour naviguer par mot et extraire les paramètres des commandes précédentes.
la source