Il y a deux côtés à la question, le côté technique et le côté historique.
La réponse technique est parce bash
qu'utilise GNU Readline . Dans readline
Control-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".
où \C-a
signifie "Control-a".
bind -p
affichera 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
, kH
puis Homeet Endsera défini sur beginning-of-line
et end-of-line
. Les deux bash
et readline
sont développés par Chet Ramey , un utilisateur Emacs et également le développeur d' ce
un 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 tvlib
package 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_.tgz
archive 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 scrlin
package 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: