Comment déplacer le curseur mot par mot dans le terminal OS X

762

Je connais la combinaison Ctrl+ Apour sauter au début de la commande en cours, et Ctrl+ Epour sauter à la fin.

Mais existe-t-il un moyen de sauter mot à mot, comme le fait Alt+ / dans les applications Cocoa?

l'homme d'étain
la source
2
Quel shell utilisez-vous? Frapper?
Sargun Dhillon
4
iTerm2 est tellement plus agréable que le terminal intégré. J'ai posté des instructions ci-dessous sur la façon de personnaliser le clavier :)
cwd
21
Les ALTraccourcis ont été ajoutés à Terminal dans la dernière version d'OS X.
Mosty Mostacho
7
Ce n'est pas hors sujet à mon avis, le shell Bash est un environnement de programmation pertinent et les liaisons de ligne de lecture sont omniprésentes dans les applications CLI Linux les plus populaires. Regardez également le nombre de votes positifs, la communauté a parlé.
GL2014
11
Réouvrir le vote, OS X Terminal compte beaucoup comme un outil de programmation.
djechlin

Réponses:

567

Hors de la boîte, vous pouvez utiliser le Esc+ assez bizarre Fpour passer au début du mot suivant et Esc+ Bpour passer au début du mot actuel.

Kristian J.
la source
47
Il n'était pas pratique de ré-appuyer sur les deux touches afin de réexécuter la commande. Je trouve cela assez boiteux de le faire dans le terminal Mac OSX, par rapport au terminal GNOME.
Phương Nguyễn
245
Vous pouvez activer "Utiliser l'option comme méta-clé" dans Terminal> Préférences> Paramètres> [profil]> Clavier . Ensuite, vous n'avez pas besoin de taper manuellement l'Esc séparément.
Chris Page
7
De plus, si vous appuyez sur Esc+ Fà la fin d'une ligne ou sur l'autre combinaison de touches au début de la ligne, il insère simplement la lettre à la place. Ennuyeux!
Noldorin
10
Re «bizarre»: «F» et «B» représentent «Forward» et «Back». Control-F déplace le curseur d'un caractère vers l'avant et Control-B déplace le curseur d'un caractère vers l'arrière. L'utilisation du modificateur Meta (ou ESC) signifie «se déplacer par des mots». Ce sont des liaisons compatibles avec emacs. Si vous utilisez bash, il existe une option pour utiliser des liaisons compatibles vi, ou vous pouvez les personnaliser entièrement avec ~/.inputrc.
Chris Page
5
Utiliser l'option comme méta n'est malheureusement pas une option pour ceux d'entre nous qui ont besoin de la touche option pour taper des symboles shell importants comme ~ et | (comme sur un clavier français).
Eric O Lebigot
417

Sous Mac OS X - les raccourcis clavier suivants fonctionnent par défaut. Notez que vous devez faire en sorte que la touche Option agisse comme Meta dans les préférences du terminal (sous l'onglet clavier)

  • alt (⌥)+ Fpour sauter F vers l' avant d'un mot
  • alt (⌥)+ Bpour sauter B ackward d'un mot

J'ai observé que les raccourcis clavier emacs par défaut pour une navigation texte simple semblent fonctionner sur les shells bash. Vous pouvez utiliser

  • alt (⌥)+ Dpour supprimer un mot à partir de la position actuelle du curseur
  • ctrl+ Apour sauter au début de la ligne
  • ctrl+ Epour sauter en fin de ligne
  • ctrl+ Kpour tuer la ligne à partir de la position du curseur
  • ctrl+ Ypour coller du texte depuis le tampon de mise à mort
  • ctrl+ Rpour inverser la recherche des commandes que vous avez tapées dans le passé à partir de votre historique
  • ctrl+ Spour transférer la recherche (fonctionne en zsh pour moi mais pas bash)
  • ctrl+ Fpour avancer d'un char
  • ctrl+ Bpour reculer d'un caractère
  • ctrl+ Wpour supprimer le mot en arrière de la position du curseur
Varun Katta
la source
1
Merci! Je me demandais pourquoi cela n'avait pas fonctionné, c'est exactement ce dont j'avais besoin.
Flov
11
Vous pouvez modifier la méta dans iterm2 comme suit: Préférences -> Profils -> Clés -> La touche d'option gauche agit comme +ESC, alors vous pouvez utiliser OPTION f / b pour déplacer le mot en avant et en arrière en conséquence. Plus
Alan Dong
5
[ Ctrl + W ] - pour supprimer le mot en arrière de la position du curseur
YemSalat
[ctrl + u] - pour supprimer l'entrée entière
Cornelius
286

Voici comment vous pouvez le faire

Par défaut, le Terminal dispose de ces raccourcis pour se déplacer (gauche et droite) mot à mot:

  • esc+ B(gauche)
  • esc+ F(droite)

Vous pouvez configurer alt+ et générer ces séquences pour vous:

  • Ouvrez les préférences du terminal ( cmd+ ,);
  • Dans l'onglet Paramètres, sélectionnez Clavier et double-cliquez ⌥ ←s'il est là, ou ajoutez-le s'il ne l'est pas.
  • Définissez le modificateur comme vous le souhaitez et tapez la touche de raccourci dans la zone: esc+ B, générant le texte \033b(vous ne pouvez pas taper ce texte manuellement).
  • Répéter pour mot-droite ( esc+ Fdevient \033f)

Alternativement, vous pouvez vous référer à cet article de blog sur textmate:

http://blog.macromates.com/2006/word-movement-in-terminal/

Fil
la source
7
Pour les utilisateurs de MacOSX 10+ et iTerm: soit vous attribuez le raccourci clavier sur les préférences globales, soit une combinaison de touches de profil. Assurez-vous de sélectionner: "Send Escape Sequence" dans la liste déroulante, sélectionnez et entrez juste Bpour le retour ou Fpour le transfert dans le Esc+champ
Gus
+1 pour un super mnémonique auquel je n'avais pas pensé plus tôt. Je ne m'en souviendrai définitivement / malheureusement pas maintenant parce que j'ai configuré alt leftet alt rightgénéré ces séquences
Arc676
Si j'ajoute le mappage de clé au terminal, il le lie à '^ [B' au lieu de Esc-B.
Andrea Bergonzo
164

Passez à iTerm2 . C'est gratuit et beaucoup plus agréable que l'ancien terminal ordinaire. Il a également beaucoup plus d'options de personnalisation, comme les raccourcis clavier.

J'aime aussi que vous puissiez utiliser cmdet 1-9 pour basculer entre les onglets. Essayez-le et vous ne reviendrez jamais au terminal ordinaire :)

Comment configurer les préférences de clavier personnalisées dans iterm2

  • Installer iTerm2
  • Lancez puis accédez au volet des préférences.
  • Choisissez l'onglet des profils de clavier
  • Vous devrez soit copier le profil vers quelque chose de nouveau, puis supprimer les raccourcis de touches fléchées tels que ^+ Right/ Leftou si vous ne vous souciez pas d'une sauvegarde, supprimez-les simplement du profil par défaut.
  • Assurez-vous ensuite que votre profil modifié est sélectionné (suivi)

Image 1.png

  • Maintenant, choisissez l'onglet clavier (ligne très supérieure)

iTerm 2

  • Cliquez sur le bouton plus pour ajouter un nouveau raccourci clavier
  • Dans la première case, tapez CMD+Left arrow
  • Dans la deuxième case, choisissez "envoyer le code d'échappement"
  • Dans la troisième case, tapez la lettre B

Image 2.png

  • Répétez avec les combinaisons de touches souhaitées. escape+ Bdéplace un mot vers la gauche, escape+ fdéplace un mot vers la droite.
  • vous pouvez également configurer cmd+ dpour supprimer le mot devant le curseur avec escape+d

Je frappe souvent le mauvais bouton ( cmd/ control/ alt) avec une touche fléchée et j'ai donc mes combinaisons de touches fléchées avec ces boutons tous définis pour sauter en avant et en arrière des mots, mais veuillez faire ce qui vous convient le mieux.

cwd
la source
4
Peu importe ce que je fais, je ne peux pas entrer Ctrl + Arrow Leftou Right- Upet Downfonctionne: / essayé avec et sans le nouveau profil défini par défaut
Tobi
4
Lösung: J'ai dû désactiver les raccourcis de contrôle de mission sous les préférences de système de MacOS -> le clavier :)
Tobi
L'instruction ci-dessus ne fonctionne plus avec iTerm2. Veuillez consulter mes réponses ci-dessous pour iTerm2 Build 3.3.4.
Accrochez
150

En fait, il existe une bien meilleure approche. Maintenez option( altsur certains claviers) et appuyez sur les touches fléchées gauche ou droite pour vous déplacer par mot. Aussi simple que cela.

option
option

Vous ctrleamènera également à la fin de la ligne et vous ctrlaamènera au début.

mdubez
la source
2
Parfois, cela ne fonctionne pas dans certains cas. Pour moi, quand j'ai ouvert Terminal.app, c'était bien, mais pour IntelliJ, il a juste imprimé [Det [C. Pour résoudre ce problème, ajoutez bind '"[D": backward-word'et bind '"[C": forward-word'à mon .bashrc.
Jamie Counsell
@JamieCounsell J'ai ajouté une liaison à mon .bashrcmais cela n'a pas fonctionné, quelque chose ne va pas pour moi? (J'utilise RubyMine)
张艳军
@ 张艳军 Je ne sais pas si RubyMine lit au .bashrcdémarrage du terminal. Essayez de echo "here"voir si ce message s'affiche lorsque vous ouvrez un nouveau terminal. De plus, vous devez fermer et rouvrir le terminal ou l'exécuter source ~/.bashrcpour qu'il lise le nouveau fichier.
Jamie Counsell
79

J'ai Alt+ / travail: ouvrir Préférences Réglages de Keyboard , définissez l'entrée pour le curseur de l' option gauche pour envoyer la chaîne à shell: \ 033b , et ensemble l' option curseur vers la droite pour envoyer chaîne à shell: \ 033F . Vous pouvez également l'utiliser pour d'autres combinaisons de touches de contrôle.

Peter Hilton
la source
20
Pour obtenir le \ 033b, vous devez en fait appuyer sur Echap, puis sur b.
Matthew Schinckel
7
Je suis sur Snow Leopard et je trouve que cela ne fonctionne que lorsque vous l'activez Enable option as meta key. Au fait, c'est très cool. La clé est sûrement beaucoup plus pratique à atteindre comparée à Esc + B ou Esc + F
Phương Nguyễn
2
Par curiosité, que se passe-t-il exactement ici? Pourquoi ce code est-il différent au départ sous OSX? Comment puis-je trouver d'autres codes de ce type?
Koobz
dans mon mac ses Préférences> Profils> Clés clé d'option gauche définie comme + Ecs
Arun
38

En fait, cela dépend du shell que vous utilisez, mais la plupart des shells ont des liaisons similaires. Les liaisons auxquelles vous faites référence (par exemple Ctrl+ Aet Ctrl+ E) sont des liaisons que vous trouverez dans de nombreux autres programmes et elles sont utilisées depuis des lustres, BTW fonctionne également dans la plupart des applications d'interface utilisateur.

Voici un aperçu des liaisons par défaut pour Bash:

Raccourcis clavier Bash les plus importants

Veuillez également noter que vous pouvez les personnaliser. Vous devez créer un fichier, nom comme vous le souhaitez, j'ai nommé le mien .bash_key_bindings et le mettre dans mon répertoire personnel. Là, vous pouvez définir des options bash générales et vous pouvez également définir des raccourcis clavier. Pour vous assurer qu'ils sont appliqués, vous devez modifier un fichier nommé ".bashrc" que bash lit au démarrage (vous devez le créer, s'il n'existe pas) et y effectuer l'appel suivant:

bind -f ~/.bash_key_bindings

~ signifie répertoire personnel en bash, comme indiqué ci-dessus, vous pouvez nommer le fichier comme vous le souhaitez et le placer où vous le souhaitez tant que vous alimentez le bon chemin + le nom à lier.

Permettez-moi de vous montrer quelques extraits de mon fichier .bash_key_bindings:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Ceux-ci définissent simplement quelques options (par exemple, désactivez la cloche; tout cela peut être recherché sur la page Web de bash).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Ceux-ci s'assurent que les caractères seuls ne font rien mais s'assurent que le caractère est "tapé" (ils s'insèrent sur le shell).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

C'est assez intéressant. Si je tape Ctrl+ Dseul (j'ai sélectionné d pour supprimer), rien ne se passe. Mais si je tape alors une minuscule w, le mot à gauche du curseur est supprimé. Cependant, si je tape des majuscules, le mot à droite du curseur est tué. Il en va de même pour l et L pour toute la ligne à partir du curseur. Si je tape un "a", la ligne entière est réellement supprimée (tout avant et après le curseur).

J'ai placé sauter un mot en avant sur Ctrl+ Fet un mot en arrière sur Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

Comme vous pouvez le voir, vous pouvez créer un raccourci, qui mène immédiatement à une action, ou vous pouvez en créer un, qui ne fait que commencer une séquence de caractères, puis vous devez taper un (ou plusieurs) caractères pour qu'une action se déroule comme suit: montré dans l'exemple ci-dessus.

Donc, si vous n'êtes pas satisfait des fixations par défaut, n'hésitez pas à les personnaliser à votre guise. Voici un lien vers le manuel bash pour plus d'informations.

Mecki
la source
comment est le commandcode clé? Dans votre exemple, controloui \C, mais comment command?
Paschalis du
Fondamentalement, je veux mapper Ctrl + A à cmd + gauche (aller au début de la ligne)
Paschalis
1
@Paschalis Sur MacOS X, la touche de commande correspond à Metadans bash ( \M), cmd + left serait \M-\e[D. Cependant, vous ne pouvez pas mapper cmd + ... à quoi que ce soit, tous les raccourcis de commandes sont gérés (et donc avalés) par l'application Terminal elle-même (ceux qui ne sont jamais transmis au shell) et cmd + laisse les cartes à la "fenêtre précédente" si vous en avez plusieurs les fenêtres du terminal s'ouvrent. Désolé, ce n'est tout simplement pas possible avec l'application Terminal.
Mecki
18

Utilisez le préréglage d' édition de texte naturel !

entrez la description de l'image ici

Il lie essentiellement, entre autres séquences de touches, Option + Flèche gauche à la ^[bséquence et Option + Flèche droite à la séquence^[f

Cela fonctionne dans fish et bash, ainsi que dans le terminal psql.

Dziamid
la source
C'est le moyen le plus efficace de définir un bon ancien mappage pour les clés. Merci!
fedesismo
Au cas où quelqu'un d'autre serait confus comme moi, notez que ce préréglage n'est disponible que sous le sous-onglet Clés de profil , pas l' onglet Clés de niveau supérieur .
ben-albrecht
15

Si vous êtes un utilisateur de Vim, vous pouvez essayer le mode vim de bash. Exécutez ceci ou mettez-le dans votre ~/.bashrcfichier:

set -o vi

Par défaut, vous êtes en mode insertion; appuyez sur Échap et vous pouvez vous déplacer comme vous le pouvez dans Vim en mode normal, donc le mouvement par mot est wou b, et les touches de mouvement habituelles fonctionnent également .

jches
la source
15

Si vous vérifiez Use option as meta keydans l'onglet clavier des préférences, les commandes de style emacs par défaut pour les mots avant et arrière et ⌥F( Alt+ F) et ⌥B( Alt+ B) respectivement.

Je recommanderais de lire From Bash to Z-Shell . Si vous voulez augmenter vos prouesses bash / zsh!

Mat
la source
1
Oui, ça marche. Mais le problème est quand je veux taper des accolades ([] {} |) qui sont sur Option-7, Option-8 et Option-9. Les options sont maintenant méta donc ça finit avec Meta-7, Meta-8 ... Des idées?
Martin Wickman
12

A partir de Mac OS X Lion 10.7, Terminal cartes Option- Left/Right Arrowà Esc- b/fpar défaut, ceci est maintenant intégré pour bash et d' autres programmes qui utilisent ces raccourcis clavier emacs compatibles.

Chris Page
la source
12

Maintenez la touche Option enfoncée et cliquez à l'endroit où vous souhaitez déplacer le curseur

Dan Alboteanu
la source
1
Pas une mauvaise solution.
duyn9uyen
8

Dans Bash, ceux-ci sont liés à Esc- Bet Esc- F. Bash a beaucoup, beaucoup plus de raccourcis clavier; jetez un oeil à la sortie de bind -ppour voir ce qu'ils sont.

Andy Lynch
la source
4

Sous iterm2de » Préférences> Profil> Touches , vous cliquez sur le +dessous Affectations de touches et d' enregistrer un nouveau raccourci. Pour l' action , sélectionnez Send Escape Sequenceet tapez bou fpour en arrière et en avant respectivement.

Lorsque j'ai essayé d'en enregistrer un pour ( Ctrl+ ), j'ai remarqué dans le champ Raccourci clavier que la flèche ne s'affichait jamais. Il s'est avéré que je devais d'abord désactiver les préférences système par défaut du Mac > Clavier> Raccourcis> Raccourcis Mission Control pour que les choses fonctionnent, car ils remplaceront les raccourcis par défaut d'iterm2. Cela devrait également être vrai pour l'application de terminal standard.

Préférences système du clavier

qix
la source
1

Nouvelle réponse pour les utilisateurs iTerm2 Build 3.3.4:

Étape 1: (macOS X) Préférences Système> Clavier> onglet Raccourcis> Sélectionnez Mission Control (panneau de gauche)> Décochez les raccourcis étiquetés "Déplacer vers la gauche d'un espace" et "Déplacer vers la droite d'un espace"

Étape 2: (iTerm2 Build 3.3.4) Préférences> Profils> Sélectionner * Par défaut (panneau de gauche)> onglet Clés> Supprimer les entrées "⌥->" et "⌥ <-"> Définir les deux "Option de gauche (⌥) Touche: "et" Touche droite (⌥): "vers Esc +

Pas de problème avec les profils de coque, pas de problème avec le terminal masOS inférieur (par défaut), pas d'Esc + F / B maladroit, rincez et répétez le non-sens.

Terminé!

Profitez de cette astuce, mes collègues PROGRAMMATEURS!

Pendre
la source
0

Comme indiqué précédemment, vous pouvez ajouter set -o vivotre ~/.bashrcpour utiliser les liaisons vi/ vimtouches, ou bien vous pouvez ajouter la partie suivante dans .bashrcpour vous déplacer avec les Ctrltouches fléchées et:

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Pour démarrer l'effet de ces lignes de code, vous pouvez source ~/.bashrcsoit démarrer une nouvelle session de terminal.

Chinmay
la source