Existe-t-il un moyen de passer à une partie antérieure d'une commande de ligne de commande dans le terminal Mac?

9

Je me retrouve souvent à écrire de longues commandes dans le shell bash - des choses avec de nombreux arguments, des adresses Web, des routes, etc. et ainsi de suite. De temps en temps, je me rendrai compte que j'ai oublié, disons, de mettre mon "bundle exec" au début de la commande, ou quelque chose mal orthographié, ou oublié des guillemets. Ou quelque chose d'aussi simple que de mettre "cd" au lieu de "vim".

Ainsi commence le processus fastidieux de maintenir la touche flèche gauche jusqu'à ce que je revienne au début de la commande.

Existe-t-il un moyen de revenir au début de la ligne?

GlypheGryphe
la source
2
Vous voudrez peut-être vous débarrasser de l'application de terminal par défaut et télécharger iTerm
Clement Herreman
Pourquoi? Je viens de vérifier, et il semble se comporter à peu près de la même manière. (La clé d'accueil fonctionne, maintenant, mais puisque j'ai les autres clés, cela n'a pas vraiment d'importance). Que propose-t-il qui valait la peine de refaire tous mes paramètres et configurations et tâches et ainsi de suite?
GlyphGryph
Cela semble être quelque chose que vous pouvez configurer avec .inputrc
Rob
De plus, pour sauter un mot à la fois, utilisez ⌥B et ⌥F pour sauter respectivement d'avant en arrière.
fideli
@fideli, mais uniquement si vous avez activé «Utiliser l'option comme méta-clé». Notez que depuis Mac OS X Lion 10.7, les paramètres de clavier par défaut du terminal mappent Option-Flèche gauche / Flèche droite à Esc-b / f, donc aucune configuration n'est nécessaire.
Chris Page

Réponses:

12

En plus de ^ A et ^ E, vous pouvez faire

  • Esc- breculer d'un mot
  • Esc- favancer d'un mot
  • Ctrl- breculer d'un caractère
  • Ctrl- fpour avancer d'un caractère

Voir le manuel bash pour les commandes de déplacement .

glenn jackman
la source
Une chose à noter - cela vient d'Emacs, et en ajoutant l' emacsoption à vos shellopts, vous pouvez en obtenir un peu plus.
TC1
6

Vous pouvez utiliser les commandes Emacs, par exemple:

  • ctrl-A pour aller au début de la ligne de commande
  • ctrl-E pour aller à la fin de la ligne de commande

C'est bash, pas spécifique à Mac.

mouviciel
la source
3
set -o vi

Puis Escsuivi de

^début de ligne $fin de ligne bun mot en arrière wmot un mot en avant

kizzx2
la source
Je suis un grand fan de Vim, donc le principe de votre réponse est bon pour moi, mais l'édition de ligne de commande modale peut être un peu déroutante pour l'OP, surtout sans aucune mention de la façon de revenir à la saisie! Revenez en mode insertion en utilisant i(insérer) pour taper avant le curseur ou a(ajouter) pour taper après le curseur.
Cascabel
J'utilise vi comme éditeur de texte principal depuis des décennies, mais je préfère toujours les raccourcis clavier emacs pour mon shell.
Keith Thompson
En fait, l'OP utilise vim pour toute édition de texte, donc savoir que vous pouvez définir des normes vi est incroyablement utile. Merci beaucoup!
GlyphGryph
@Kieth Thompson: Je pensais la même chose. Je pensais juste que le shell ne se mélangeait pas bien avec ce truc de changement de mode (comme la vtouche irritante en mode vi). Mais après un certain temps, je viens d'être infecté par vim, je vous suggère donc de l'essayer: P
kizzx2
1

Cela ne répond pas à votre question mais cela peut résoudre votre problème dans certains cas.

Dans bashle !!jeton est remplacé par votre commande précédente. Donc, si vous oubliez d'ajouter quelque chose au début d'une commande (comme sudo), vous pouvez faire quelque chose comme ça

# ./super_secret_command --with-args
=> ACCESS DENIED

# sudo !!
sudo ./super_secret_command --with-args
=> ACCESS GRANTED
Sam
la source
0

Vous pouvez configurer les Ctrl/Opt+Left/Rightraccourcis réguliers à utiliser dans Terminal. De cette façon, vous n'avez pas à tout réapprendre lorsque vous utilisez Terminal.

Ouvrez Terminal »Préférences…» Paramètres »(sélectionnez un profil)» Clavier .

Là, attribuez les raccourcis suivants:

  • Control + Cursor Left: Envoyer une chaîne \033[1~au shell
  • Control + Cursor Right: Envoyer une chaîne \033[4~au shell
  • Option + Cursor Left: Envoyer une chaîne \033[5Dau shell
  • Option + Cursor Right: Envoyer une chaîne \033[5Cau shell

J'aime aussi ce qui suit ( Fn + Left/Right):

  • Home: Envoyer une chaîne \033[1~au shell
  • End: Envoyer une chaîne \033[4~au shell

entrez la description de l'image ici

Daniel Beck
la source
Sur Lion, ⌥ ← et ⌥ → sont liés à M-bet M-fpar défaut. Et ⌃ ← et ⌃ → sont les raccourcis par défaut pour changer les espaces.
Lri
0

J'en avais besoin dans Cygwin, pas sur un Mac, mais l'ajout de ce qui suit ~/.inputrcpeut aussi aider:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 
À M
la source
0

Je ne suis pas un utilisateur Mac mais qu'en est-il de la Homeclé? Cela fonctionne bien sur un terminal Linux.

m0skit0
la source
1
Non, qui défile vers le haut de la fenêtre du terminal.
GlyphGryph
Par défaut, Accueil et Fin font défiler la vue, qui est le comportement standard de Mac. Par défaut, Shift-Home et Shift-End envoient respectivement «ESC [H» et «ESC [F». Ils sont tous personnalisables dans Terminal> Préférences> Paramètres> [profil]> Clavier .
Chris Page
0

La meilleure façon de se déplacer sur la ligne de commande dans Mac Os X est d'utiliser mon profil: https://github.com/lingtalfi/mac-terminal-shortcuts

Il fournit les raccourcis (intuitifs) suivants:

ALT-left: move one word backward
ALT-right: move one word forward
CTRL-left: move to the beginning of the line
CTRL-right: move to the end of the line
ALT-backspace: kill one word backward
ALT-del: kill one word forward
ALT-up: set word after cursor to uppercase
ALT-down: set word after cursor to lowercase
home: move to the beginning of the line
end: move to the end of the line    
CTRL-backspace: Same as ALT-backspace
CTRL-del: Same as ALT-del
lingue
la source