Utilisation prévue de Ctrl + T dans Bash?

47

J'ai remarqué que bash a un raccourci pour ctrl+ Tqui permute les deux derniers caractères avant le curseur.

Je me demande pourquoi les ingénieurs ont décidé d'inclure cela.

  • At-il hérité d'une convention antérieure?
  • Ou existe-t-il un but pratique pour lequel cela est couramment utilisé?
Philip Kirkbride
la source
13
Pas une réponse, mais ce n'est pas bash, en tant que tel, mais readline(ce que bash utilise pour entrer à l'invite). Votre bash utilise des emacsraccourcis clavier; vous pouvez changer en raccourcis clavier si votre éditeur est partisan;) sanctum.geek.nz/arabesque/vi-mode-in-bash Il y a quelques "feuilles de triche" pour readlineici: readline.kablamo.org/emacs .html et readline.kablamo.org/vi.html .
John N
13
Historiquement, les fonctionnalités d'édition en ligne de commande de style Emacs ont été initialement développées dans Bash, puis transformées en une bibliothèque séparée - mais cela s'est passé avant la première publication en 1989. La toute première entrée dans lesreadline ChangeLog allusions à cela. Donc, à l'origine, le raccourci était traité dans Bash lui-même, bien que brièvement, avant d'être retiré readline- mais le raccourci venait d'Emacs à Bash (je ne sais pas s'il a été inventé à Emacs ou est venu ailleurs).
Stephen Kitt

Réponses:

63

Il est très utile de corriger rapidement les fautes de frappe:

sl

devient

ls

avec un seul CtrlT.

Vous pouvez également AltTéchanger des mots ( par exemple lors du basculement entre serviceet systemctl...).

Historiquement parlant, la CtrlTfonctionnalité est probablement venue d’Emacs à Bash. Il a probablement été copié sur Emacs par un autre éditeur; il était présent dans l'éditeur E de Stanford (voir Essential E page 13) en 1980, et E eut un fort impact sur Richard Stallman (comme décrit dans Free as in Freedom ). Il a été implémenté dans les toutes premières versions de Bash, avant sa première parution en 1989, lorsqu'il a été extrait de la readlinebibliothèque où il se trouve aujourd'hui (la toute première entrée dans les readline ChangeLogallusions à cela).

Stephen Kitt
la source
2
Échanger des mots était quelque chose de nouveau et de très utile
Mongrel
Fournir un argument numérique à Alt + T transpose le mot sur (ou avant) le curseur avec le n- ème mot avant ce mot. par exemple: Alt + 2 Alt + T modifiera word1 word2 word3à word3 word2 word1si elle est effectuée à word3.
crw
@crw ce serait bien mais alt + T n'échange pas de mots sur mon terminal. Je viens d'ouvrir l'élément de menu 'set title'.
Philip Kirkbride
@PhilipKirkbride c'est dommage, votre émulateur de terminal vous prive d'un raccourci très utile ...
Stephen Kitt le
@PhilipKirkbride il devrait y avoir une option de l'émulateur de terminal pour désactiver les clés d'accès au menu
Joril
15

Cette combinaison de touches, une liaison héritée de l’ emacséditeur, permet d’échanger les 2 derniers caractères saisis à la fin de la ligne, de les utiliser au milieu d’une ligne, d’échanger le caractère situé à gauche du curseur et celui situé en dessous de la ligne. le curseur.

Il peut sembler vain d’avoir une reliure pour une caractéristique aussi peu utilisée qui peut être facilement réalisée avec quelques touches de plus. Les vieux lecteurs tels que je l’utilise assez souvent et permettaient de gagner du temps de transmission à l’époque des modems 300 bauds, à la fin des années 70, notamment au milieu de longues lignes.

Une commande similaire et plus utile, liée à Alt+ T, transpose les mots à gauche et à droite du curseur.

Ta été choisi car il s’agit de la lettre initiale de transposition . Les autres liaisons ayant une origine similaire incluent:

  • Ctrl+ B, pour reculer , déplace le curseur d'une position vers la gauche,
    • Alt+ Bdéplace le curseur d'un mot vers la gauche,
  • Ctrl+ F, pour avancer , déplace le curseur d'une position vers la droite,
    • Alt+ Fdéplace le curseur d'un mot vers la droite,
  • Ctrl+ A, pour Anfang ou ante , déplace le curseur au début de la ligne,
  • Ctrl+ E, pour la fin , déplace le curseur à la fin de la ligne,
  • Ctrl+ N, pour next , récupère la ligne suivante,
  • Ctrl+ P, pour précédent , récupère la ligne suivante,
  • Ctrl+ D, pour supprimer , supprime le caractère sous le curseur,
    • Alt+ Dsupprime le mot sous le curseur,
  • Ctrl+ K, pour tuer , coupe la fin de la ligne,
  • Ctrl+ Y, pour yank , colle le contenu du presse-papier,

Ces liaisons, implémentées dans le paquet GNU readline, sont donc disponibles dans tous les programmes qui l’utilisent pour la saisie utilisateur, tels que bash , mais aussi gdb , bc , ...

Certains d'entre eux sont également disponibles dans d'autres environnements: la ligne de saisie de l'URL de Firefox, les champs de saisie de texte dans l'interface graphique OS / X et de nombreux gestionnaires de fenêtres basés sur X.

Les utilisateurs de vim peuvent sélectionner les liaisons correspondantes via une variable d’environnement.

chqrlie
la source
Oui, c'est bien pour ceux qui, comme nous, oublient parfois que nous tapons dans un terminal plutôt que dans un Emacs. Je suis toujours pris au dépourvu lorsque j'utilise les widgets textarea de Firefox (comme celui-ci maintenant), auxquels il manque ces liaisons importantes. :-(
Toby Speight
Existe-t-il un moyen de jumeler les versions caractères et mots des commandes connexes dans votre description? Il aide vraiment la mémoire lorsque vous reconnaissez que les Altet Ctrlversions de ces frappes sont liées d'une manière cohérente.
Toby Speight
@TobySpeight GTK + supporte un autre thème de raccourci clavier de style Emacs afin que vous puissiez utiliser certains de ces raccourcis clavier dans Firefox. C-tsemble cependant ne rien faire. wiki.archlinux.org/index.php/GTK%2B#Emacs_keybindings
Candy Gumdrop
@TobySpeight avez-vous déjà essayé, c'est tout le texte! ? Il vous permet d’éditer le contenu de textareas dans l’éditeur de votre choix.
Stephen Kitt
Merci @Stephen - J'en ai entendu parler, mais je ne l'ai pas encore essayé. Je vais suivre cela ...
Toby Speight
10

Il est très usuel de corriger les peines de pseudonymes que vous avez acquises par inadvertance.

(Ayant un RSI sévère aux deux poignets, je finis par l'utiliser beaucoup, personnellement ...)

duveteux
la source
2
Mes yeux saignent
base
4

Un très vite corriger les fautes de frappe. effectue le bloc de correction immédiat 2 avant le courser.

Si vous avez tapé ls-et que vous voulez un espace entre ls& tirets, vous pouvez utiliser Ctrl+T

Cela fonctionne si vous avez un espace après le trait d'union puis faites Ctrl+T

Bâtard
la source