Comment revenir au premier caractère de la ligne de commande * nix?

17

Lorsque vous écrivez une commande longue dans la ligne de commande * nix et nohupque vous devez revenir au premier caractère, afin d'ajouter quelque chose au début (par exemple, a , lorsque vous réalisez que le processus sera long, ou a sudo, lorsque vous réalisez que vous avez besoin des autorisations root), le curseur peut mettre longtemps à revenir au premier caractère ...

Y a-t-il un raccourci qui vous permet de sauter directement là-bas?

J'utilise un mac, ce Homen'est donc pas une option

clami219
la source
2
Si vous utilisez un ordinateur portable Apple, Fn + Gauche / Droite sont équivalents à Accueil / Fin. (Et corrélativement, Fn + Up / Down sont PageUp / Down.)
duskwuff -inactive-
2
Pour ceux qui lisent cette question, il s'agit en fait de poser des questions sur le shell, plus précisément sur l'édition en ligne de commande dans le shell. La réponse Ctrl-A avant est bash (très probablement) avec l'édition de style Emacs, la valeur par défaut.
Rich Homolka
4
Une alternative si vous avez juste besoin d'ajouter sudoest de taper sudo !!. Le !!obtient remplacé par la commande précédente.
Matthew Crumley

Réponses:

29

Ctrl+Adevrait marcher. Ctrl+Ecorrespond à la fin de la ligne de commande.

choroba
la source
1
Génial! Cela fonctionne parfaitement aussi sur mac!
clami219
1
Cela s'applique également à de nombreux éditeurs de code.
Jwosty
2
@ clami219: Cela fonctionne réellement dans la plupart des contextes de texte dans OSX. Les fixations Emacs sont une chose merveilleuse ...
tommyo
Merci, cela fonctionne aussi sur Linux.
Gideon Babu
10

Cela dépend du shell en question.

Certains shells (comme AT&T ksh88) n'offrent pratiquement aucune modification de ligne d'entrée.

Dans les shells implémentant l' viédition de mode (vous devrez peut-être l'activer avec set -o vi), cela se fait en appuyant sur Esc(pour passer du mode d'insertion) suivi 0de passer au début de la ligne ou $de sauter à la fin de la ligne. Entrez ensuite à nouveau en mode d'insertion en appuyant sur i- le curseur restera où il est - ou a- le curseur se déplacera d'un à droite pour ajouter du texte.

vi l'édition de mode a récemment été mandatée par la norme POSIX.

L' édition de mode beaucoup plus courante emacs (Dieu merci, cela n'a rien à voir avec le système d'exploitation de l'éditeur-barre oblique d'Emacs) permet Ctrl-Ade sauter au début de la ligne et Ctrl-Ede sauter à la fin de la ligne. Ce mode nécessite que vous set -o emacsexécutiez sur de nombreux shells (principalement AT&T ksh93) mais il est activé par défaut dans mksh et GNU bash.

La plupart des shells modernes prennent en charge les modes emacset vi. (Ces deux modes nécessitent un tty pour fonctionner.)

Dans de nombreux shells, vous pouvez personnaliser les raccourcis clavier; généralement pour le emacsmode, bien que certains shells permettent également de personnaliser la liaison de touches pour le vimode. Si vous avez une clé à laquelle vous préférez la lier, vous devez d'abord comprendre les séquences de touches qu'elle produit (par exemple, sur mon système, Alt-CursorLeftproduit Esc+[+1+;+3+D( ^[[1;3D; ^Xest Ctrl-Xet ^[est Esc), donc je peux taper quelque chose comme

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

et ce raccourci sera modifié, selon le shell. Vous pouvez généralement les conserver dans le fichier de démarrage ( ~/.mkshrc, ~/.kshrc) ou, pour GNU bash, dans ~/.inputrc. Notez que tous les shells ne prennent pas en charge bindind toutes les clés dans toutes les versions.

Vous pouvez généralement découvrir les caractères générés par une clé en exécutant simplement catle shell, en tapant la clé et en regardant. Appuyez ensuite sur ^C( Ctrl-C) pour abandonner cat.

mirabilos
la source
J'aime utiliser ^ D, le caractère de fin de ligne Unix, pour terminer cat. Dans mon esprit, c'est ^ D parce que le flux de texte est "terminé".
Aaron Hall
@AaronHall: cela ne fonctionnera pas s'il y a déjà quelque chose sur la ligne. De plus, nous voulons l'abandonner, pas y mettre fin ;-) Mais oui, dans le cas normal, vous avez raison. Mais c'est un cas particulier.
mirabilos
Le terminal peut également effectuer une modification de ligne.
Samuel Edwin Ward
@mirabilos Pour envoyer un EOF sans nouvelle ligne, faites simplement ^ D ^ D (c'est-à-dire appuyez deux fois sur D).
Potatoswatter
@Potatoswatter oui (amusant, je ne le savais pas moi-même), mais je veux spécifiquement avorter ici. Lors de l'envoi, ^D^Dje reçois toujours "la jonque" en écho ...
mirabilos
2

Avez-vous essayé la touche Accueil? J'utilise MobXterm pour me connecter à Linux Box et j'utilise les touches Home et End du clavier pour accéder au premier ou au dernier caractère de la commande.

PAS
la source
Tu as raison! Je devais préciser que j'utilise un mac ...
clami219
2

Si vous êtes passé en vimode, en utilisant set -o vi, vous pouvez appuyer sur Escet soit Iou Apour saisir du texte au début ou à la fin de la ligne. Ou si vous cherchez simplement à déplacer le curseur, c'est ^et $.

TankorSmash
la source
mode vi de quel shell?
David Richerby