¿Por qué el atajo Ctrl + A salta al inicio de una línea en la terminal?

11

Al igual que saltar al final de una línea es Ctrl+ E, ¿dónde Ese puede pensar como final? ¿Por qué salta al principio A?

xi.lin
fuente
1
Puedes pensar en "A" para "Anfang"
Anthon
O "A" es la primera letra en alpabet
Costas
Tenga en cuenta que en emacs(y bashtambién en) puede saltar al principio / final de la línea también con las teclas Home/ Endpor defecto.
jimmij

Respuestas:

20

Hay dos lados en la pregunta, el lado técnico y el lado histórico.

La respuesta técnica es porque bashusa GNU Readline . En readlineControl-a está vinculado a la función beginning-of-line, puede mostrar esto con:

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

donde \C-asignifica "Control-a". bind -pmostrará todos los enlaces (tenga cuidado al usarlos bind, es fácil romper su teclado si accidentalmente proporciona opciones o argumentos adicionales).

Algunos de los enlaces anteriores se agregan de forma predeterminada, otros los he agregado (vía .inputrc) para varios terminales que he usado. Desde bash-2.0, si el terminal termcap contiene las capacidades kh, y kHluego Homey Endse establecerá en beginning-of-liney end-of-line. Ambos bashy readlineestán desarrollados por Chet Ramey , un usuario de Emacs y también el desarrollador de ceun clon de Emacs.


(Tenga en cuenta que esto se esfuerza por resumir muchos años de historia de hace muchas décadas, y pasa por alto algunos detalles).

Ahora, ¿por qué es Control-a en particular? Readline utiliza por defecto enlaces tipo Emacs . Control-a en GNU Emacs invoca move-beginning-of-line, lo que consideramos como la función "home" ahora.

El EMACS original de Stallman and Steel se inspiró en el editor E de Fred Wright (uno de los primeros editores WYSIWYG) y TECO (un editor / lenguaje críptico modal): EMACS era un conjunto de macros para TECO. Ver Essential E [PDF] (de SAIL , 1980). Sin embargo, E usó Control-Form para "inicio de línea", esto estaba en el teclado "DataDisc" que tenía una Controltecla y una Formtecla. El teclado de cadetes espaciales de la época (que por cierto carece de una Hometecla, aunque tenía una End) se atribuye comúnmente a la interfaz del teclado Emacs.

Una de las características deseables de EMACS fue su uso del modo de edición de línea "en tiempo real" Control-R de TECO (TECO es anterior a los terminales CRT / teclado), puede ver las asociaciones de teclas en la página 6 del MIT AI Lab 1978 ITS Introducción a el editor EMACS [PDF escaneado], donde ┌ se usa para denotar Control. En este modo, las combinaciones de teclas eran todas secuencias de control, en gran parte mnemotécnicas: Control-E Fin de esta línea , Control-P moverse a la línea anterior , Control-N moverse a la siguiente línea , Control-B hacia atrás un personaje , y no menos importante Control -Un paso al comienzo de esta línea , la sugerencia de Costas de "primera letra del alfabeto" para esto es tan buena como cualquiera.

(Una combinación de teclas similar se encuentra en el tvlibpaquete de macros que tiene como objetivo hacer que EMACS se comporte como el editor TVEDIT, vinculando el control A y E a la oración hacia adelante y hacia atrás , pero usó diferentes secuencias para el comienzo y el final de la línea).

Los enlaces Control-A / Control-E en "modo ^ R" se implementaron directamente en el ITS TECO (1983, versión 1208, ver el _teco_.tgzarchivo en el sitio nocrew PDP10 / ITS , o en Github ), aunque no puedo determinar con mayor precisión cuando aparecieron por primera vez, y la fuente TECO no indica por qué se eligieron enlaces específicos. El documento MIT EMACS de 1978 anterior implica que en 1978 EMACS no utilizó TECO Control-A / Control-E nativo, es posible que el scrlinpaquete macro (línea de pantalla) los haya implementado.

Recordar:

  • bash usa readline
  • las combinaciones de teclas de readline siguen a Emacs / EMACS
  • El EMACS original fue creado con TECO, heredando muchas características
  • Las macros de modo interactivo de TECO usaban (principalmente) combinaciones de teclas de control mnemotécnicas, y el "inicio de línea" terminó asignado a Control-A

Ver también:

Sr. púrpura
fuente
6

Porque a Richard Stallman le gusta Emacs .

Ctrl+ aestá saltando al comienzo de la línea en Emacs, y libreadline usa las mismas combinaciones de teclas que Emacs. Bash usa libreadline.

Jasen
fuente
2
¡Tenga en cuenta también que puede hacer set -o vio echo 'set editing-mode vi' >> ~/.inputrcobtener combinaciones de teclas de Vim!
wchargin
¿Por qué las personas están dando estos puntos de respuesta? La pregunta era por qué se eligió ctrl + a como comando para ir al inicio de la línea, no cuál es el comando.
wurtel
@Wurtel La respuesta está en la primera oración, ver "historia de Gnu".
Jasen
44
Lo siento, pero porque a Richard Stallman le gusta Emacs. no me dice por qué ctrl-a me lleva al inicio de la línea. ¿Por qué no ctrl-s, o ctrl-x, o lo que sea?
wurtel
0

Se eligió la letra "a" porque Control + b y Control + s ya se tomaron, por lo que decidieron que, dado que A era la primera letra del alfabeto latino, sería lo que usarían. ¿Cómo puedo saber? Porque hoy recibí la respuesta de uno de los desarrolladores de TECO (predecesor de EMACS) y EMACS.

OrandoSalvasVidas
fuente