Pourquoi le raccourci Ctrl + A saute-t-il au début d'une ligne dans le terminal?

11

Comme sauter à la fin d'une ligne est Ctrl+ E, où Epeut être considéré comme une fin, pourquoi saute-t-il au début en utilisant A?

xi.lin
la source
1
Vous pouvez penser à "A" pour "Anfang"
Anthon
Ou "A" est la première lettre de l'alphabet
Costas
Veuillez noter que dans emacs(et dans bashégalement), vous pouvez passer au début / fin de la ligne également avec Home/ Endtouches par défaut.
jimmij

Réponses:

20

Il y a deux côtés à la question, le côté technique et le côté historique.

La réponse technique est parce bashqu'utilise GNU Readline . Dans readlineControl-a est lié à la fonction beginning-of-line, vous pouvez le montrer avec:

$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[7~", "\M-[H".

\C-asignifie "Control-a". bind -paffichera toutes les liaisons (soyez prudent bind, il est facile de casser votre clavier si vous fournissez accidentellement des options ou des arguments supplémentaires).

Certaines des liaisons ci-dessus sont ajoutées par défaut, d'autres que j'ai ajoutées (via .inputrc) pour différents terminaux que j'ai utilisés. Depuis bash-2.0, si le terminal termcap contient les capacités kh, kHpuis Homeet Endsera défini sur beginning-of-lineet end-of-line. Les deux bashet readlinesont développés par Chet Ramey , un utilisateur Emacs et également le développeur d' ceun clone Emacs.


(Veuillez noter que cela tente de résumer de nombreuses années d'histoire d'il y a plusieurs décennies et passe sous silence certains détails.)

Maintenant, pourquoi est-ce Control-a en particulier? Readline utilise par défaut des liaisons de type Emacs . Control-a dans GNU Emacs invoque move-beginning-of-line, ce que nous considérons maintenant comme la fonction "home".

L'EMACS original de Stallman and Steel a été inspiré par l' éditeur E de Fred Wright (un ancien éditeur WYSIWYG) et TECO (un éditeur / langage modal cryptique) - EMACS était un ensemble de macros pour TECO. Voir Essential E [PDF] (de SAIL , 1980). E utilisait cependant Control-Form pour "début de ligne", c'était sur le clavier "DataDisc" qui avait une Controltouche, et une Formtouche. Le clavier de cadet de l' espace de l'époque (manquant d'ailleurs d'une Homeclé, bien qu'il en ait un End) est généralement blâmé pour l'interface du clavier Emacs.

L'une des caractéristiques souhaitables d'EMACS était son utilisation du mode d'édition de ligne en temps réel Control-R de TECO (les TECO sont antérieurs aux terminaux CRT / clavier), vous pouvez voir les raccourcis clavier à la page 6 du MIT AI Lab 1978 ITS Introduction to l'éditeur EMACS [PDF scanné], où ┌ est utilisé pour désigner Control. Dans ce mode, les raccourcis clavier étaient toutes des séquences de contrôle, en grande partie mnémoniques: Control-E Fin de cette ligne , Control-P se déplaçait vers la ligne précédente , Control-N se déplaçait vers la ligne suivante , Control-B en arrière d'un caractère , et pas moins Control -Un mouvement au début de cette ligne , la suggestion de Costas de "première lettre de l'alphabet" pour cela est aussi bonne que n'importe quelle autre.

(Une liaison de clé similaire se trouve dans le tvlibpackage de macros qui visait à faire en sorte qu'EMACS se comporte comme l'éditeur TVEDIT, en liant les contrôles A et E aux phrases en arrière et en avant , mais en utilisant différentes séquences pour le début et la fin de la ligne.)

Les liaisons Control-A / Control-E en "mode ^ R" ont été implémentées directement dans ITS TECO (1983, version 1208, voir l' _teco_.tgzarchive sur le site nocrew PDP10 / ITS , ou sur Github ), bien que je ne puisse pas déterminer plus précisément quand ils sont apparus pour la première fois, et la source TECO n'indique pas pourquoi des fixations particulières ont été choisies. Le document 1978 du MIT EMACS ci-dessus implique qu'en 1978, EMACS n'utilisait pas TECO natif Control-A / Control-E, il est possible que le scrlinpackage de macro (ligne d'écran) les ait implémentés.

Récapituler:

  • bash utilise readline
  • les raccourcis clavier de readline suivent Emacs / EMACS
  • l'EMACS original a été créé avec TECO, héritant de nombreuses fonctionnalités
  • Les macros en mode interactif de TECO ont utilisé (principalement) des liaisons de touches de contrôle mnémoniques, et le "début de ligne" a finalement été attribué à Control-A

Voir également:

Mr Spuratic
la source
6

Parce que Richard Stallman aime Emacs .

Ctrl+ asaute au début de la ligne dans Emacs, et libreadline utilise les mêmes raccourcis clavier que Emacs. Bash utilise libreadline.

Jasen
la source
2
Notez également que vous pouvez faire set -o vi, ou echo 'set editing-mode vi' >> ~/.inputrc, pour obtenir des raccourcis clavier Vim!
wchargin
Pourquoi les gens donnent-ils des points de réponse? La question était de savoir pourquoi ctrl + a était choisi comme commande pour aller au début de la ligne, et non quelle était la commande.
wurtel
@Wurtel La réponse est dans la première phrase, voir "l'histoire de Gnu".
Jasen
4
Désolé, mais parce que Richard Stallman aime Emacs. ne me dit pas pourquoi ctrl-a me conduit au début de la ligne. Pourquoi pas ctrl-s, ou ctrl-x, ou quoi que ce soit?!
wurtel
0

La lettre "a" a été choisie parce que Control + b et Control + s étaient déjà pris alors ils ont décidé que puisque A était la première lettre de l'alphabet latin, ce serait ce qu'ils utilisaient. Comment puis-je savoir? Parce que j'ai obtenu la réponse aujourd'hui de l'un des développeurs de TECO (prédécesseur d'EMACS) et d'EMACS.

PrayingSavesLives
la source