Comment sauter des mots dans un terminal OS X?


11

Disons que j'ai écrit une longue commande dans le terminal Mac OSX, c'est-à-dire

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

et maintenant je veux changer le mot Helloen Hi.

Pour ce faire, je dois maintenant appuyer (ou maintenir) sur la touche gauche du clavier jusqu'à ce que le "curseur" atteigne la fin du mot Hello, puis le supprimer. La technique habituelle consistant à «maintenir les options» ne fonctionne pas comme dans la plupart des autres applications OS X.

Existe-t-il un moyen de sauter un mot à la fois (ou tout autre moyen plus rapide d’obtenir le curseur)?

Réponses:


19

L’édition en ligne de commande est une fonction de votre shell, pas de Terminal . Votre shell est probablement bash et son style d’édition en ligne de commande est probablement «emacs».

Voici quelques combinaisons de touches de style Emacs que vous pourriez trouver utiles:

  • Californie: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • Mo: backward-word
  • CD: delete-char
  • Md: kill-word(supprime le mot suivant)
  • M-DEL: backward-kill-word

C- x signifie Control+ x, donc Ca est Control+ a.

M- x signifie Meta+ x, mais il n'y a probablement pas de touche Méta sur votre clavier. Vous pouvez donc utiliser ESC x (c’est-à-dire Escapealors x). Le terminal dispose d'un paramètre pour envoyer automatiquement ESC avant que les touches ne soient enfoncées Option. L'utilisation de cette fonctionnalité désactive la gestion des caractères étendus que Mac OS X fournit généralement lors de l'utilisation du modificateur Option. Ainsi, si vous utilisez peu de caractères étendus et souhaitez envoyer Option+ xenvoyer ESC x , vous pouvez activer cette option de terminal .

Il existe de nombreuses façons de passer à «Bonjour» dans votre exemple:

  • Rechercher “Bonjour”: Cr H ello Cj (ou ESC)
    • Dans Emacs normal, il vous suffirait d'utiliser RET ( Return) pour mettre fin à la recherche à l'emplacement actuel et revenir à l'édition. Mais dans bash , les liaisons par défaut font que RET (c'est-à-dire Cm) exécute toujours la ligne en cours, même si une recherche incrémentielle est active. La partie Cj / ESC est donc un écart par rapport à Emacs normal.
  • Aller au début de la ligne et avancer: Ca Mf Cf (ou )
  • Sautez au début de la ligne, puis déplacez-vous par mots: Ca Mf Mf Mb
  • Utilisez beaucoup Mb (seulement vraiment réalisable si vous mappez Option à Meta).

Il existe également plusieurs façons de réaliser le remplacement souhaité:

  • supprimer le mot et le remplacer: Md H i
  • supprimer des caractères et les remplacer: Cd Cd Cd Cd Cd H i
  • Dépassez “H” et supprimez l'œuvre suivante, remplacez-la: Cf Md i
  • Dépassez “H” et supprimez les caractères restants, remplacez-les: Cf Cd Cd Cd Cd i

Si vous vous êtes arrêté à la fin du mot (peut-être via Ca Mf Mf), vous pouvez utiliser M-DEL H i.

Vous pourriez faire quelque chose comme bind -P | lesstrouver d'autres liaisons intéressantes. Consultez la section readline de la page de manuel bash (ou les parties readline des pages d’information bash ) pour plus de détails.


Ok, cela ne concerne pas vraiment la question, mais comment mettez-vous les mots qui ressemblent à des touches du clavier?
Wuffers

1
@Monsieur. Homme: Utilisez des <kbd>éléments. Un sous-ensemble de HTML est autorisé dans le balisage ici . L’apparence est due au style local de la balise (arrière-plan, couleur de bordure, style de bordure, largeur de bordure, etc.). Vous pouvez consulter le balisage source de mon message («Afficher le source» sur cette page ). Voir meta.stackexchange.com/questions/5527 même si le style fantaisie est désactivé sur MSO: meta.stackexchange.com/questions/1939/#23571
Chris Johnsen le

Je ne sais pas si cela est évident ou non, cela m'a pris une minute pour le comprendre, mais je suis sur un MBP sans clé méta et j'utilise une configuration de terminal par défaut. Pour avancer et revenir en arrière sur les mots, je peux appuyer sur Esc puis sur F, ou sur Esc puis B. Je voulais simplement mentionner cela parce que la façon dont il a été expliqué ci-dessus me faisait essayer d'appuyer sur Esc + x puis sur f ou b ...
cwd

Existe-t-il un moyen de modifier l'environnement ou le shell afin que je puisse utiliser les touches ctrl ou fn + correspondant à mon IDE?
codecowboy

1
Vous pouvez également utiliser les liaisons vi en ajoutant set -o vidans votre fichier .bashrc! gnu.org/software/bash/manual/html_node/…
Will Munn

2

La liaison readline par défaut forward-wordest Meta-F ( bash(1)page de manuel, section READLINE , sous- section Commandes pour le déplacement ). Je ne suis toutefois pas sûr de ce que Meta traduit dans OS X. Option, peut-être.


+1 - tu as vraiment raison. cela fonctionne en bash sur OSX
Yuval
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.